从 java 流中检索对象的副本
Retrieve copy of an object from a java stream
我想从过滤流中获取对象的副本。
我现在是这样弄的
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();
}
}
我的问题是,没有更优雅的方式来处理流吗?
Foo foo = new Foo(fooList.stream()
.filter(f -> (f.getId().equals(anotherFooId)))
.findAny().get());
您可以在 findAny()
之后调用 Foo::new
,这样当您找不到匹配时就不需要实例化两个对象:
Foo foo = fooList.stream()
.filter(f -> (f.getId().equals(anotherFooId)))
.findAny().map(Foo::new).orElse(new Foo(anotherFooId));
我想从过滤流中获取对象的副本。
我现在是这样弄的
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();
}
}
我的问题是,没有更优雅的方式来处理流吗?
Foo foo = new Foo(fooList.stream()
.filter(f -> (f.getId().equals(anotherFooId)))
.findAny().get());
您可以在 findAny()
之后调用 Foo::new
,这样当您找不到匹配时就不需要实例化两个对象:
Foo foo = fooList.stream()
.filter(f -> (f.getId().equals(anotherFooId)))
.findAny().map(Foo::new).orElse(new Foo(anotherFooId));