gpt4 book ai didi

java - 获取第一个满足条件的对象

转载 作者:搜寻专家 更新时间:2023-10-31 08:19:32 25 4
gpt4 key购买 nike

我在下载列表中满足条件的第一个对象时遇到问题。

无论条件如何,我的代码总是返回列表中的第一个对象。返回 id = 1 的人。

main(){
public static void main(String args[]) {
List<Person> persons = Lists.newArrayList();
persons.add(new Person("1", "aaa",23, true));
persons.add(new Person("2", "bbb",16, false));
persons.add(new Person("3", "ccc",56, true));


Person per = (Person) Iterables.getFirst(persons, new Predicate<Person>() {
@Override
public boolean apply(Person person) {
return person.getAge()> 50;
}
});

System.out.println(per.getId()); // always "1"
}


public class Person {
private String id;
private String name;
private int age;
private boolean isSome;


public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public boolean isSome() {
return isSome;
}

public void setSome(boolean isPaid) {
this.isSome = isPaid;
}
public Person(){}

public Person(String id, String name, int age, boolean isSome){
this.id = id;
this.name = name;
this.age = age;
this.isSome = isSome;
}
}

有人可以解释为什么会发生这种情况以及如何处理吗?

最佳答案

Iterables.getFirst() 不做你认为它做的事。你应该使用 Iterables.tryFind() 方法,它返回传递的 iterable 中的第一个匹配元素。它返回 Optional<T> , 所以你需要调用 get()结果,或 Optional#or() , 如果你想要一些默认值。

Person per = Iterables.tryFind(persons, new Predicate<Person>() {
@Override
public boolean apply(Person person) {
return person.getAge()> 50;
}
}).or(defaultPerson);

关于java - 获取第一个满足条件的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29065534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com