我有一个具有年龄属性的用户。 而在我的方法中,我有List。我怎样才能把它拆分到多个表的其他用户,如:如何使用lambda表达式创建多个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表达式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表达式的开始代码的代码。是否有另一种使用lambda表达式特征(如filter和Predicate)编写代码的方法?
对不起,如果我的例子不清楚。我在代码块有评论说它有更多的条件,像gt6andlt30User的另一个列表。我们如何解决这个问题 – gianglaodai
@gianglaodai'partitioningBy'只适合用一个谓词将List分解成两个分区。你可以使用'Collectors.groupingBy'来将List分成具有完全相同年龄的用户组(即你将得到一个'Map>',但也许这不是你想要的。 –
Eran
so in另外我的问题,如果我想在每个if区块中添加元素到列表中,那么有没有办法做到这一点? – gianglaodai