在Java中创建“唯一”对象列表的最佳方法是什么?

时间:2016-08-03 00:05:22

标签: java list set unique java-stream

我正在尝试创建一个唯一的列表。我不能使用“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));
    }
  }
}

1 个答案:

答案 0 :(得分:0)

我之前想过,我无法使用.distinct(),因为它使用的是基于'Thing.id'的.equals(),而某些'Things'没有'我还没有。然后我意识到,在forLoop的末尾,所有内容都被存储库分配了一个id。

List<Thing> things = previousThings;
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));
    }
  }
}
List<Thing> distinctThings = things.stream().distinct().collect(Collectors.toList);