我有一个对象的扁平化多映射(列表),我想将其转换为一个列表,其中“关键”属性/字段(例如下面的 name)在所有条目中是唯一的.
在多个条目具有相同键(名称)的情况下,应选择具有最大creationDate 字段的条目。
示例:
List<Object> myList =
[
{name="abc", age=23, creationDate = 1234L},
{name="abc", age=12, creationDate = 2345L},
{name="ddd", age=99, creationDate = 9999L}
]
应转换为:
List<Object> =
[
{name="abc", age=12, creationDate = 2345L},
{name="ddd", age=99, creationDate = 9999L}
]
有没有一种优雅的方法(可能使用 Guava 库?)在 Java 中解决这个问题?我意识到我可以尝试使用以 name 作为键的 HashMap 来查找所有唯一的条目,但我觉得有更好的方法来解决这个问题。
谢谢!
最佳答案
如果您有可能使用 Java 8,我会推荐 Streams 作为其他答案。 如果没有,你可以选择这样的东西。
首先,您按创建日期对列表进行降序排序。然后你创建一个 TreeSet 女巫平等对待所有同名的人。因此,只会添加第一个(最高的)creationDate,而忽略其他的。
List<Person> persons = new ArrayList<>();
persons.add(new Person("abc", 23, 1234L));
persons.add(new Person("abc", 12, 2345L));
persons.add(new Person("def", 99, 9999L));
Collections.sort(persons, new Comparator<Person>() {
public int compare(Person o1, Person o2) {
return (int) (o2.creationDate - o1.creationDate);
}
});
Set<Person> personsHashed = new TreeSet<>(new Comparator<Person>() {
public int compare(Person o1, Person o2) {
return o2.name.compareTo(o1.name);
}
});
personsHashed.addAll(persons);
关于java - 过滤列表的优雅解决方案,使其对于给定的对象属性是唯一的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24273891/