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

标签 java list arraylist java-stream option-type

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

相关文章:

java - java.util.Arrays 中的私有(private)静态类 ArrayList - 为什么?

java使用递归打印项目列表似乎效率低下

java - 将迭代器转换为列表

java - 狐猴项目中 IndriRunQuery 的空白输出

java - 超时后如何重新建立 JDBC 连接?

list - 如何自动创建 LaTeX 文档中使用的项目列表?

java - 帮助解决一个简单的 Android ListView 问题

android - arraylist.add 在 android 中的编译时错误

java - java抽象类和接口(interface)最佳实践

java - Android以编程方式添加布局资源到 View