我有一个带有年龄属性的用户。 在我的方法中,我有一个List。如何将它拆分成多个列表,以便另一个用户可以使用:
List<User> lt6Users = new ArrayList<User>();
List<User> gt6Users = new ArrayList<User>();
for(User user:users){
if(user.getAge()<6){
lt6Users.add(user);
}
if(user.getAge()>6){
gt6Users.add(user);
}
// more condition
}
我刚刚了解了lambda表达式的两种用法:
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表达式的初始代码。是否有另一种使用lambda表达式特性(如filter和Predicate)编写代码的方法?
partitioningBy
只适用于通过单个谓词将 List 分成两个分区。您可以使用Collectors.groupingBy
将 List 分成具有完全相同年龄的用户组(即,您将获得一个Map<Integer,List<User>>
),但也许这不是您想要的。 - Eran