【问题标题】:How to get duplicate objects on ArrayList?如何在 ArrayList 上获取重复对象?
【发布时间】:2017-05-02 17:39:58
【问题描述】:

我在 Java 中遇到了一个问题...我有一个对象列表 Objeto,该对象具有下列属性:

public class Objeto{
    private FirstEntity first;
    private List<ThirdEntity> thirds;
}

我需要在此列表中找到具有相同 FirstEntity 属性的对象...我该怎么做?

提前致谢!

【问题讨论】:

  • 覆盖对象中的equals() 方法。
  • 你试过什么?你必须付出一点努力。 FirstEntity 的实例是否真的“相同”或者它们只是具有相同的内容?
  • @ChristopherSchneider 他们只有“相同”的内容
  • @PritamBanerjee 您如何建议覆盖等于?
  • 您是否有 FirstEntity 对象与列表中的属性进行比较?或者您想在没有任何模板 FirstEntity 对象的情况下从列表中查找所有的币种?

标签: java arrays arraylist java-8


【解决方案1】:

这个问题很难回答的主要原因是我们不知道FirstEntity 有多少可能的值。因此,我们必须使用Map&lt;FirstEntity, List&lt;Objecto&gt;&gt;,其中,对于每个FirstEntity,我们存储一个共享FirstEntity 属性的List&lt;Objecto&gt;

要编译,您必须在 Objecto 类中为 FirstEntity 创建一个 getter:

public FirstEntity getFirstEntity() {
    return first;
}

然后,List&lt;Objecto&gt; 可以流式传输并收集到Map&lt;FirstEntity, List&lt;Objecto&gt;&gt;

Map<FirstEntity, List<Objecto>> map = thirds.stream().collect(Collectors.groupingBy(Objecto::getFirstEntity));

为此,您必须在 FirstEntity 中覆盖 Object#equalsObject#hashCode

【讨论】:

  • 谢谢!但我无法删除元素...我必须编辑重复的元素...
  • 不客气!我已经编辑了我的帖子以适应这一点。
  • 感谢您的回答!但这不是正确的对象...我已经编辑了我的问题以更好地说明...谢谢! =)
  • 哦,这更有意义,我会再次修复它!
【解决方案2】:

(和以前一样,如果您需要使用 Java 7 或更早版本 - 与其他答案中的 FirstEntity hashCode() 和 equals() 相同的讨论)。

假设我们有

 List<Objecto> myObjectos;

那么以下应该可以工作:

 Map<FirstEntity, List<Objecto>> map = new HashMap<>();
 for(Objecto objecto : myObjectos){
       if(!map.containsKey(objecto.first)){
              map.put(objecto.first, new LinkedList<Objecto>());
       }
       map.get(objecto.first).add(objecto);
 }

【讨论】:

  • 感谢您的回答!但这不是正确的对象...我已经编辑了我的问题以更好地说明...谢谢! =)
  • 不确定我是否理解 - 您是在问,对于列表 L 上的所有 Objectos,它们中的哪一个有第一个,而另一个 Objecto(在列表中)已经有?还是您要求“分组”所有“第一”共享的 Objecto?
  • 如果您不需要具有唯一属性的对象,只需从映射中删除所有大小为
  • @dan.mwasuser2321368 你在for循环中的代码可以简化为:map.computeIfAbsent(objecto.first, (key)-&gt; new LinkedList&lt;&gt;()).add(objecto)
  • @holi-java 我的回答明确指出这是针对用户仅限于 Java 7 的情况。Jacob G 的回答包含 Java 8 解决方案。
猜你喜欢
  • 2019-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-01
  • 2011-07-28
相关资源
最近更新 更多