当前位置: 首页 > 知识库问答 >
问题:

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

潘向明
2023-03-14

我正试图创建一个独特的列表。我不能使用“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个答案

晁国发
2023-03-14

我以前认为我不能使用。distinct(),因为它使用的。equals()是基于“thing.id”的,而有些“things”还没有“id”。然后我意识到,在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);
 类似资料:
  • 问题内容: 复制列表的最佳方法是什么?我知道以下方法,哪种更好?还是有另一种方法? 问题答案: 如果要浅拷贝(不复制元素),请使用: 如果要进行深层复制,请使用复制模块:

  • 问题内容: 我有一个应用程序,它读取带有大量数据行的CSV文件。我根据数据类型为用户提供了行数的摘要,但我想确保不会读取太多的数据行并导致OutOfMemoryErrors。每行转换为一个对象。有没有一种简便的方法以编程方式找出该对象的大小?是否有一个引用定义了一个原始类型和对象引用有多大VM? 现在,我的代码可以读取多达32,000行,但我还想让代码显示尽可能多地读取行,直到使用32 MB内存为

  • 问题内容: 这是一个小问题,因为我可以轻松地参加一对班做这项工作。我并不是真的想要这样做,我觉得应该有一些简单的,内置的,类似于Java的方法来返回两个值。你们最好的,最简单的方法是什么?数组?其他一些数据结构? 问题答案: 据我所知,不幸的是在Java中没有对的内置表示(我当然希望有)。就个人而言,当我编写一个项目时发现配对类经常很有用时,我会创建一个通用类(这可能是您在想的)。返回数组是一种快

  • 问题内容: 我有一个说“销售”的对象列表。我只需要其产品与另一个列表(例如saleProductList)中的对象匹配的Sales对象。 除了循环以外,还有没有更好的方法可以做到这一点。 问题答案: 如果您已经在使用Google的Guava库,则它具有Collections2.filter()方法,该方法将仅返回集合中与给定Predicate匹配的项。 但是,这是否能回答您的问题取决于您避免循环的

  • 问题内容: 我有一个需要删除/过滤重复项的对象数组。我本来只是要在Object元素上覆盖equals和hachCode,然后将它们放在Set中…但是我认为我至少应该轮询一下stackoverflow,看看是否还有另一种方法,也许是某些其他API的一些聪明方法? 问题答案: 我会用你的方法来覆盖同意,并和使用的东西实现。 这样做还使其他开发人员绝对清楚需要非重复特征。 另一个原因-您现在必须选择最能

  • 在Neo4j上工作时,尝试为数百万数据建立独特的节点和关系。目前我们使用合并查询来实现唯一性。有没有其他好的方法使节点唯一?