我想从过滤后的流中获取对象的副本。
此刻,我这样做了。
Foo foo = new Foo(fooList.stream()
.filter(f -> (f.getId().equals(anotherFooId)))
.findAny().orElse(new Foo(anotherFooId)));
可以看出,除了其他构造函数之外,这个对象还有一个克隆构造函数。
class Foo {
private String id;
Foo(String id) {
this.id = id;
}
Foo(Foo originalFoo) {
this.id = originalFoo.getId();
}
}
我的问题是,用流来做这个没有更优雅的方法吗?
答案 0 :(得分:3)
您可以在Foo::new
之后致电findAny()
,这样当您找不到匹配项时,您就不需要实例化两个对象:
Foo foo = fooList.stream()
.filter(f -> (f.getId().equals(anotherFooId)))
.findAny().map(Foo::new).orElse(new Foo(anotherFooId));
答案 1 :(得分:0)
Foo foo = new Foo(fooList.stream()
.filter(f -> (f.getId().equals(anotherFooId)))
.findAny().get());