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

Java 如何使用findAny()而不返回null,java,list,arraylist,java-stream,optional,Java,List,Arraylist,Java Stream,Optional,我想知道如何在数据流中使用findAny,当它没有发现任何巧合时,它不会返回null 将getCoCountry作为last调用的方法通常是不好的。 你能做的是: listContries.stream() .filter(country -> country.getNoCountry() .equals(CountryFinal)) .findAny().map(Country::getCoCountry).orEl

我想知道如何在数据流中使用findAny,当它没有发现任何巧合时,它不会返回null

将getCoCountry作为last调用的方法通常是不好的。 你能做的是:

listContries.stream()
            .filter(country -> country.getNoCountry()
            .equals(CountryFinal))
            .findAny().map(Country::getCoCountry).orElse(WHATEVER_YOU_WANT);
澄清一下:findAny返回可选的,可能包含country的实例。您可以在地图中安全地调用getCoCountry。这就是可选类型的重要性。在这一步中,您仍然是安全的,因为您仍然有一个可能包含整数结果的可选项。最后,您可以使用orElse来决定如果实例为null,您希望得到什么。

将getCoCountry作为last调用的方法通常是不好的。 你能做的是:

listContries.stream()
            .filter(country -> country.getNoCountry()
            .equals(CountryFinal))
            .findAny().map(Country::getCoCountry).orElse(WHATEVER_YOU_WANT);
澄清一下:findAny返回可选的,可能包含country的实例。您可以在地图中安全地调用getCoCountry。这就是可选类型的重要性。在这一步中,您仍然是安全的,因为您仍然有一个可能包含整数结果的可选项。最后,您可以使用orElse来决定如果实例为空,您想要什么。

Stream::findAny返回,其方法可选::findAny,根据文档,有4种方法返回T:

返回T或抛出NoTouchElementException 返回T或默认值 返回T或供应商提供的值 返回T或抛出自定义异常 据我所知,您正在寻找第二个或第三个方法,它在原点为null的情况下返回定义的值。可以使用返回null对象,该对象表示有效但不执行任何操作的对象。或者您可以使用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
注意,不需要同时按国家名称进行筛选,然后检查是否相等,因为您希望只有一个西班牙。

流::findAny返回,其方法可选::findAny,根据文档,有4种方法返回T:

返回T或抛出NoTouchElementException 返回T或默认值 返回T或供应商提供的值 返回T或抛出自定义异常 据我所知,您正在寻找第二个或第三个方法,它在原点为null的情况下返回定义的值。可以使用返回null对象,该对象表示有效但不执行任何操作的对象。或者您可以使用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

注意,不需要同时按国家名称进行筛选,然后检查是否相等,因为您希望只有一个西班牙。

那么您想返回什么?a您正在调用一个可能为null的方法,因为OrelsNull会导致NullPointerException,而不是null结果。b您正在将结果强制转换为永远不能为null的基元int。@YCF_L在这种情况下,我真正想要返回的是0,而在您想要过滤对象的情况下,我不能在orElse新对象内部执行…?您想要返回什么?a您正在调用一个可能为null的方法,因为orElsenull,这将导致NullPointerException而不是null结果。b您正在将结果强制转换为不能为null的原始int。@YCF_L对于这种情况,我真正想要返回的是0,对于您想要过滤对象的情况,我不能在orElse新对象内部执行…?我认为最重要的一点确实是对各种可能性的一个很好的概述。findAny通常更好,无需检查。int idC=listCountries.stream.filter….mapToIntCountry::getCoCountry.findAny.Orels0@约佩金:谢谢:国际海事组织最重要的一点确实是对各种可能性的良好概述。findAny通常更好,无需检查。int idC=listCountries.stream.filter….mapToIntCountry::getCoCountry.findAny.Orels0@约佩金:谢谢: