我有一个年龄属性的用户.在我的方法中,我有List.如何将其拆分为多个List,以供其他用户使用:
Listlt6Users = 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表达式函数编写代码?
你可以使用Collectors.partitioningBy(Predicate super T> predicate)
:
Map> partition = users.stream() .collect(Collectors.partitioningBy(user->user.getAge()<6));
partition.get(true)
将为您提供年龄<6的用户列表,并partition.get(false)
为您提供年龄> = 6的用户列表.