【问题标题】:Find an item in a List Using streams in java [duplicate]使用java中的流在列表中查找项目[重复]
【发布时间】:2017-02-25 07:48:56
【问题描述】:

我有一份人员名单。每个人都有一个名字和年龄。

我想使用流来查找此人是否已经在列表中。

public void process (Person pItem) {
    Person curPerson = persons.stream().filter(x -> x.name.equals(pItem.name)).collect(.. ???)
}

【问题讨论】:

    标签: java java-8 java-stream


    【解决方案1】:
    Person curPerson= persons.stream().filter(x -> x.name.equals(pItem.name)).findFirst().orElse(null);
    

    【讨论】:

    • 我想这就是我需要的,但是如果我想检查姓名和年龄怎么办?
    • 您可以添加年龄:Person curPerson=persons.stream().filter(x -> x.name.equals(pItem.name) && x.age.equals(pitem.age))。 findFirst().get();
    • 请勿在此处使用.get(),除非您确定此人已经在列表中。否则它会抛出一个NoSuchElementException
    • 我确实有这个异常......我该如何解决这个问题?
    • @Pavlo Plynko:orElse("not found") 不起作用,除非您继续使用 Person 和 String 的通用基本类型。如果要将结果分配给Person 类型的变量,则只能使用orElse(null) 或使用代表未知或缺席人员的虚拟人员实例。
    【解决方案2】:

    你可以使用Stream.anyMatch

    public boolean process (Person pItem) {
        return persons.stream().anyMatch(x -> x.name.equals(pItem.name));
    }
    

    【讨论】:

    • 如果您还想检查年龄是否相同?
    • 如果 person 只包含姓名和年龄,并且你定义了 equals,你可以做persons.stream().anyMatch(Person::equals) 否则,你可以做persons.stream().anyMatch(x -> x.name.equals(pItem.name) && x.age.equals(pItem.age))
    • 如果找不到匹配项,如果结果为 Nothing,如何在 .net 中检查 ....
    猜你喜欢
    • 1970-01-01
    • 2021-12-19
    • 2013-02-21
    • 2019-01-14
    • 2013-11-17
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多