如果過濾器沒有找到值并找到它,我想知道如何從流中執行代碼,示例代碼:
@Transactional
public void change(ClassName dep){
// code
dep.getFoo()
.stream()
.filter(f -> f.getName().equals(doo.getName))
}
如果過濾器有一個值,那么:
user.setFoo(f);
如果過濾器中沒有值,則:
Foo foo = new Foo();
foo.setName("Exp");
user.setFoo(foo);
uj5u.com熱心網友回復:
我建議創建一個建構式來Foo接受name.
然后,您可以使用默認值提取名稱Optional:
Foo foo = dep.getFoo()
.stream()
.filter(f -> f.getName().equals(doo.getName))
.findAny().orElse(new Foo("Exp"));
user.setFoo(foo);
從 java 11 開始,您可以ifPresentOrElse以更清潔的方式使用:
dep.getFoo()
.stream()
.filter(f -> f.getName().equals(doo.getName))
.findAny()
.ifPresentOrElse(user::setFoo, () -> user.setFoo(new Foo("Exp")));
PS:如果你不能創建建構式,你可以只創建方法來提供它并在上面的代碼片段中使用它:
public static Foo defaultFoo() {
Foo foo = new Foo();
foo.setName("Exp");
return foo;
}
uj5u.com熱心網友回復:
試試下一個例子:
Foo foo = new Foo();
foo.setName("Exp");
user.setFoo(dep.getFoo()
.stream()
.filter(f -> f.getName().equals(doo.getName))
.findFirst().orElse(foo);
因為過濾器可能回傳一個以上的物件,所以您應該將其限制在一個物件上。findFirst 將回傳 Optional 型別的物件,如果 optional 為空,orElse 將回傳 foo。在其他情況下,您將建立 foo。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/432705.html
