尝试学习有关实际lambda用法的新内容。
我有这个问题:
我有一个对象,里面有一些其他对象的列表。那些对象有MyEnum字段。我想迭代这些对象,获取该枚举的状态,然后根据我想要将对象添加到List1,如果满足条件。如果不是,我想将对象添加到List2。
基本上将列表拆分为两个具有特殊条件的不同列表。
我已经通过两种方法来实现这一目标,一种是古老的,经典的 - 每种,第二种是java 8 lambdas,我也试图学习。
我的代码:
void groupObjects() {
for (ListObject listObject : object.getList()) {
if (MyEnum.STATUS.equals(listObject.getStatus())) {
otherList.add(listObject);
} else {
someOtherList.add(listObject);
}
}
}
void groupObjects() {
object.getList().parallelStream()
.filter(listObject-> MyEnum.STATUS.equals(listObject.getStatus()))
.forEach(listObject-> otherList.add(listObject));
object.getList().parallelStream()
.filter(listObject-> !MyEnum.STATUS.equals(listObject.getStatus()))
.forEach(listObject-> someOtherList.add(listObject));
}
我头脑中提出的问题:
我已经阅读了.parallelStream()
部分,所以暂时不要介意。
答案 0 :(得分:3)
这可以通过partitioningBy
Map<Boolean, List<SomeClass>> partitioned = object.getList().stream()
.collect(partitioningBy(listObject->MyEnum.STATUS.equals(listObject.getStatus()))
partitioned.get(true)
将为您提供包含状态为MyEnum.STATUS
且partitioned.get(false)
的对象的列表,其中会显示未包含的对象。