【问题标题】:Transforming a nested List using java Streams使用 java Streams 转换嵌套列表
【发布时间】:2019-01-20 15:50:20
【问题描述】:

是否有可能使用Streams 获得相同的结果(正如我目前使用以下嵌套 for 循环所获得的结果)?

List<String> people = Arrays.asList("John", "Adam");
List<String> dogs = Arrays.asList("alex", "rex");

List<List<String>> list = new ArrayList<List<String>>();
list.add(people);
list.add(dogs);

List<List<String>> list2 = new ArrayList<List<String>>();
for (int i = 0; i < list.size(); i++) {
    list2.add(new ArrayList<>());
    for (int j = 0; j < list.get(i).size(); j++) {
        list2.get(i).add(list.get(i).get(j).toUpperCase());
    }
}
System.out.println(list2);

我想得到这样的回应:

[[JOHN, ADAM], [ALEX, REX]]

使用以下Stream

list.stream().flatMap(l -&gt; l.stream()).map(String::toUpperCase).collect(Collectors.toList());

我只能得到这样的东西:

[JOHN, ADAM, ALEX, REX]

【问题讨论】:

    标签: java java-8 functional-programming java-stream


    【解决方案1】:

    flatMap 不会帮助你,因为你不想要平坦的输出。您应该将每个内部List分别转换为大写List,然后将所有这些Lists收集到最终嵌套输出List中。

    List<List<String>> list2 = list.stream()
            .map(l -> l.stream().map(String::toUpperCase).collect(Collectors.toList()))
            .collect(Collectors.toList());
    

    输出:

    [[JOHN, ADAM], [ALEX, REX]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-19
      • 2020-05-19
      • 1970-01-01
      • 2016-11-16
      • 1970-01-01
      • 2021-02-16
      • 1970-01-01
      • 2012-06-03
      相关资源
      最近更新 更多