加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

使用java Streams转换嵌套List

发布时间:2020-12-15 08:28:36 所属栏目:Java 来源:网络整理
导读:是否有可能使用Streams获得相同的结果(正如我目前使用以下嵌套的for循环获得)? ListString people = Arrays.asList("John","Adam");ListString dogs = Arrays.asList("alex","rex");ListListString list = new ArrayListListString();list.add(people);list
是否有可能使用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]]

使用以下流:

list.stream().flatMap(l – > l.stream()).map(String :: toUpperCase).collect(Collectors.toList());

我只能得到这样的东西:

[JOHN,ADAM,ALEX,REX]

解决方法

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

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

输出:

[[JOHN,REX]]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读