【问题标题】:Remove from ArrayList if one value of objects repeats如果对象的一个​​值重复,则从 ArrayList 中删除
【发布时间】:2020-03-04 19:00:34
【问题描述】:

如何从 ArrayList 中删除重复的对象,但前提是对象中的一个特定值与另一个对象重复?

例如: 我有一个名为 Person 的类,其中包含字段:

private String city;
private String firstName;
private String lastName;
private Long magicNumber;

我想删除与新 One 具有相同“magicNumber”的“older” Person 并将他保留在 ArrayList 中。

【问题讨论】:

标签: java arraylist


【解决方案1】:

使用流:

Collection<Person> filterd = persons.stream()
            .collect(Collectors.toMap(
                    Person::getMagicNumber, p -> p, (p1, p2) -> p2))
            .values();

【讨论】:

  • @tomaszpawlak 很高兴我能帮上忙。
【解决方案2】:

好吧,假设您在班级中覆盖了public boolean equals(Object object) 以比较您的magicNumber 字段:

https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#equals(java.lang.Object)

List<Person> persons = new ArrayList<>();
public void addToList(Person person) {
     if(persons.contains(person)) {
         persons.set(persons.indexOf(person), person);
     } else {
         persons.add(person);
     }

}

【讨论】:

  • List 中没有replace 方法,您可能是指set(int, Object)。另外,您可以删除contains,预先计算索引,然后检查条件中是否为&lt; 0
【解决方案3】:
public void addPerson(Person p) {
    list.removeIf(o -> o.magicNumber.equals(p.magicNumber));
    list.add(p);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 2020-12-17
    • 2014-05-04
    • 2011-11-24
    • 1970-01-01
    • 2015-08-25
    • 2021-11-07
    相关资源
    最近更新 更多