我想知道如何在数据流中使用 findAny()
,当它没有找到任何巧合时,它不会返回 null
。
String CountryFinal= "Spain";
List<ParContriesTO> listContries = new ArrayList<SelectItem>();
listContries.add(new SelectItem(215, "Germany"));
Integer idCountry = (int) listContries.stream()
.filter(country -> country.getNoCountry().equals(CountryFinal))
.findAny().orElse(null).getCoCountry();
最佳答案
Stream::findAny
返回 Optional
及其方法Optional::findAny
,根据文档,有4种方式返回T
:
- >
Optional::get
返回T
或抛出NoSuchElementException
- >
Optional::orElse
返回T
或默认值 - >
Optional::orElseGet
返回T
或Supplier
提供的值
- >
Optional::orElseThrow
返回T
或抛出自定义异常
据我所知,您正在寻找第二个或第三个方法,它在原点为 null
的情况下返回定义的值。您可以使用 Null-Object pattern 返回空对象它代表一个有效但“什么都不做”的对象。或者您可以使用 null
。
我建议你在 返回 null
或其他任何东西之前接收一个国家,并在其上使用 getCoCountry()
方法(我想 Country::getCoCountry
返回 int
或 Integer
) - 否则,您所做的将返回 NullPointerException
。
尝试以下代码段:
Integer idCountry = listContries.stream() // Stream
.filter(c -> countryFinal.equals(c.getNoCountry())) // Get one equals to "Spain"
.findFirst() // Get Optional<Country>
.map(Country::getCoCountry) // If exists, get its code
.orElse(0); // Or else return an invalid code
请注意,没有必要既按国家名称过滤,又检查是否相等,因为您预计只有一个 "Spain"
。
关于java - 如何使用 findAny() 而不返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52058749/