gpt4 book ai didi

filter - 如何使用 lambda 表达式创建多个列表?

转载 作者:行者123 更新时间:2023-12-02 09:04:12 28 4
gpt4 key购买 nike

我有一个具有年龄属性的用户。在我的方法中,我有 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 表达式功能(如过滤器和谓词)编写代码?

最佳答案

您可以使用 Collectors.partitioningBy(Predicate<? super T> predicate) :

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

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

关于filter - 如何使用 lambda 表达式创建多个列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34465612/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com