Java8:如何从一个列表中的一个对象中获取一个属性,该列表中的另一个属性必须与输入匹配

Java8:如何从一个列表中的一个对象中获取一个属性,该列表中的另一个属性必须与输入匹配,java,list,filter,java-8,java-stream,Java,List,Filter,Java 8,Java Stream,我有个人的名单。我想获取姓名与输入匹配的人的id,我知道这可以通过使用筛选器来完成,但在我的情况下,姓名总是唯一的,所以我只能返回一个id。请告诉我是否有其他有效的方法可以做到这一点。如果您要多次查询姓名,您可以在周围保留一张地图,将一个人映射到一个姓名(假设您的姓名确实是唯一的) 由于名称是唯一的,您可以在过滤器之后使用短路终端操作findFirst。这将允许流处理在遇到匹配时立即停止 返回列表.stream() .filter(p->p.getName().equals(输入)) .find

我有个人的名单。我想获取姓名与输入匹配的人的id,我知道这可以通过使用筛选器来完成,但在我的情况下,姓名总是唯一的,所以我只能返回一个id。请告诉我是否有其他有效的方法可以做到这一点。

如果您要多次查询姓名,您可以在周围保留一张地图,将一个人映射到一个姓名(假设您的姓名确实是唯一的)


由于名称是唯一的,您可以在
过滤器
之后使用短路终端操作
findFirst
。这将允许流处理在遇到匹配时立即停止

返回列表.stream()
.filter(p->p.getName().equals(输入))
.findFirst()//返回可选值
.map(Person::getId)
.orElse(空);//如果没有找到匹配的名称
请注意,这是一个线性(O(N))查找,根据列表的大小和执行查找的频率,可能会出现问题。
class Person{
     String Name;
     String Id;
    }
Map<String, Person> byName = new HashMap<>();
yourList.forEach(person -> byName.put(person.name, person));
Person person = byName.get("a name");
if (person != null) {
...
}