gpt4 book ai didi

java - 如何使用 findAny() 而不返回 null

转载 作者:行者123 更新时间:2023-11-29 10:08:58 24 4
gpt4 key购买 nike

我想知道如何在数据流中使用 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:

  1. > Optional::get返回 T 或抛出 NoSuchElementException
  2. > Optional::orElse返回 T 或默认值
  3. > Optional::orElseGet返回 TSupplier
  4. 提供的值
  5. > Optional::orElseThrow返回 T 或抛出自定义异常

据我所知,您正在寻找第二个或第三个方法,它在原点为 null 的情况下返回定义的值。您可以使用 Null-Object pattern 返回空对象它代表一个有效但“什么都不做”的对象。或者您可以使用 null

我建议你在 返回 null 或其他任何东西之前接收一个国家,并在其上使用 getCoCountry() 方法(我想 Country::getCoCountry 返回 intInteger) - 否则,您所做的将返回 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com