Gda*_*mon 1 java arrays list arraylist java-stream
我想知道如果我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();
Run Code Online (Sandbox Code Playgroud)
该Stream::findAny收益Optional及其方法Optional::findAny,根据该文件,有4种方式回报T:
Optional::get返回T或抛出NoSuchElementExceptionOptional::orElse返回T或默认值Optional::orElseGet返回T或提供的值SupplierOptional::orElseThrow返回T或抛出自定义异常据我所知,您正在寻找第二种或第三种方法,它在原点出现时返回一个定义的值null.您可以使用Null-Object模式返回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
Run Code Online (Sandbox Code Playgroud)
请注意,不需要按国家/地区名称进行过滤,然后检查相等性,因为您希望只有一个"Spain".