从 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));