当前位置:  开发笔记 > 编程语言 > 正文

如何使用lambda表达式创建多个List?

如何解决《如何使用lambda表达式创建多个List?》经验,为你挑选了1个好方法。

我有一个年龄属性的用户.在我的方法中,我有List.如何将其拆分为多个List,以供其他用户使用:

List lt6Users = new ArrayList();
List gt6Users = new ArrayList();
for(User user:users){
   if(user.getAge()<6){
      lt6Users.add(user);
   }
   if(user.getAge()>6){
      gt6Users.add(user);
   }
   // more condition
}

我只知道lambda表达式的2种方式:

lt6Users = users.stream().filter(user->user.getAge()<6).collect(Collectors.toList());
gt6Users = users.stream().filter(user->user.getAge()>6).collect(Collectors.toList());

上面的代码性能很差,因为它会在很多时候循环遍历列表

users.stream().foreach(user->{
  if(user.getAge()<6){
     lt6Users.add(user);
  }
  if(user.getAge()>6{
     gt6Users.add(user);
  }
});

上面的代码看起来像没有lambda表达式的起始代码中的代码.有没有其他方法使用像filter和Predicate这样的lambda表达式函数编写代码?



1> Eran..:

你可以使用Collectors.partitioningBy(Predicate predicate):

Map> partition = users.stream()
                                          .collect(Collectors.partitioningBy(user->user.getAge()<6));

partition.get(true)将为您提供年龄<6的用户列表,并partition.get(false)为您提供年龄> = 6的用户列表.


@gianglaodai`partitioningBy`仅适用于通过单个谓词将List分为两个分区。您可以使用“ Collectors.groupingBy”将列表分成年龄完全相同的用户组(即,您将获得“ Map <Integer,List <User >>”,但这也许并不是您想要的。
推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有