【发布时间】:2016-08-03 00:05:22
【问题描述】:
我正在尝试创建一个唯一列表。我不能使用“Set”,因为我需要在迭代时分配一些值。
现在我这样做是为了创建一个唯一的列表。有谁知道更好的方法吗?
List<Thing> things = previousThings.stream()
.collect(Collectors.toSet()).stream()
.collect(Collectors.toList());
我在想,如果我将它转换为一个集合并返回一个列表,它将消除任何重复的条目。我认为它需要是一个列表,以便我可以使用“List.set(..)”根据我的存储库中可能已经存在的内容进行更新。
for(int i = 0; i < things.size(); i++) {
if(things.get(i).id == null) {
existingThing = thingRepository.getByName(things.get(i).getName());
if(existingThing != null) {
things.set(i, existingThing);
} else {
things.set(i, thingRepository.save(things.get(i));
}
}
}
【问题讨论】:
-
用
.distinct()替换.collect(Collectors.toSet()).stream() -
这通常可以工作,但我应该提到我需要使用与 .equals() 不同的方法进行比较,因为它使用 id 并且我正在寻找唯一的名称。是否有类似的方法可以让您提供 lambda 进行比较? @LouisWasserman
-
什么叫“独一无二”?基于对象
equals()方法?它们是不可变的吗? -
我希望它们基于 thing.name @Ivr123 是独一无二的
标签: java list set unique java-stream