我想知道是否有更好的方法可以将lambda作为链接操作的一部分重写groupA方法?
public class Id {
private final int value;
public Id(int value) {
this.value = value;
}
public int value() {
return value;
}
}
public class Ids implements Iterable<Id> {
private final List<Id> ids;
private Ids(List<Id> ids) {
this.ids = ids;
}
public static Ids of(List<Id> ids) {
return new Ids(ids);
}
public Ids groupA() {
return Ids.of(ids.stream()
.filter(id -> id.value() > 5)
.collect(Collectors.toList()));
}
@Override
public Iterator<Id> iterator() {
return ids.iterator();
}
}
基本上我想做像
这样的事情ids.stream()
.filter(id -> id % 10 > 5)
.collect(Collectiors.toList())
.andThen(Ids::of);
并且想知道这是否可能
答案 0 :(得分:10)
不确定。你可以直接做到这一点
Ids.of(ids.stream()
.filter(id -> id % 10 > 5)
.collect(Collectors.toList()))
或者您可以将它添加到收藏家:
ids.stream()
.filter(id -> id % 10 > 5)
.collect(Collectors.collectingAndThen(Collectors.toList(), Ids::of))
答案 1 :(得分:2)
在我的StreamEx库中,有一个快捷方式toListAndThen
,使其看起来更流畅:
StreamEx.of(ids)
.filter(id -> id % 10 > 5)
.toListAndThen(Ids::of);