我有一个扁平的对象多映射(一个列表),我想把它转换成一个列表,其中一个“键”属性/字段(例如下面的名称)在所有条目中是唯一的。
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}
]
有没有一个优雅的方法(可能使用番石榴库?)用Java解决这个问题?我意识到我可以尝试使用一个以名称为键的HashMap来查找所有唯一的条目,但我感觉有一个更好的方法来解决这个问题。
谢谢!
如果您有可能使用Java8,我会推荐流,就像其他答案已经告诉您的那样。如果不是,你可以用这样的东西。
首先,按CreationDate对列表进行排序。然后创建一个树集,女巫对所有同名的人一视同仁。因此,只会添加第一个(最高的)creationDate而忽略其他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);
我还有这个包含ID列表: 我想筛选以便筛选的不包含id来自的对象,因此我尝试使用stream: 我找不到做这件事的正确函数。有人有什么建议让我试试吗?
我正在尝试有这样的方法签名:public static List FilterList(List collection,String FilterString,String Property=“”) 这样,我可以从任何地方调用这个方法,并传递给它任何列表,它将返回给我一个过滤的列表。
名单中有重名的;对于这些,只想保留最后一个。 例如。如果列表有三个项目,并且第一个和第三个项目都有值为“abc”的“name”,那么结果列表应该只包含来自原始列表的第二个和第三个项目。
问题内容: 我想使用Java 8技巧在一行中执行以下操作。 给定此对象定义: 和a ,我想得到a ,它是第一个列表中所有s对象的列表- 顺序相同。 我可以使用Java中的循环来做到这一点,但我相信Java8中应该有一个单行lambda可以做到这一点。我无法在线找到解决方案。也许我没有使用正确的搜索词。 有人可以为这种转换建议一个lambda或另一种线吗? 问题答案: 这应该可以解决问题: 也就是说
我可以在Java中使用循环来实现这一点,但我认为在Java8中应该有一个一行程序lambda来实现这一点。我无法在网上找到解决方案。也许我没有使用正确的搜索词。 有人能为这个转换提出一个lambda或另一个一行程序吗?
问题内容: 我有一个说“销售”的对象列表。我只需要其产品与另一个列表(例如saleProductList)中的对象匹配的Sales对象。 除了循环以外,还有没有更好的方法可以做到这一点。 问题答案: 如果您已经在使用Google的Guava库,则它具有Collections2.filter()方法,该方法将仅返回集合中与给定Predicate匹配的项。 但是,这是否能回答您的问题取决于您避免循环的