首先,我的问题类似于这个已经回答过的问题,在Java中,将两个arrayList合并成一个新的arrayList,没有重复项,并且顺序正确。
然而,这里的不同之处在于,我尝试将两个列表合并在一起,而不仅仅是一个字符串。我的意图是合并以下类型的两个对象(为了简化,我从示例中去掉了不必要的信息):
public class Data{
private int count;
private Type type;
private Key uniqueKey;
}
所以我得到了一个新的项目,它有一个总结计数。这将消除不需要的重复,因为这些对象上的uniqueKey是相同的。原因是我将多个业务类型映射为一个技术类型。
这里的问题是,您必须考虑到所有可能的情况,以便正确处理合并,并且不要错过原始对象。
下面是我试图用单元测试介绍的一些案例:
等等等等...
那么,如何在不发疯的情况下解决这个问题呢?
因为我花了半天时间来解决这个问题,我觉得这个简单的答案可能对其他人有用。
那么我尝试了什么:
以下是神奇的15分钟解决方案:
public static LinkedList<Data> merge(final LinkedList<Data> source) {
final HashMap<Data, Integer> temp = new HashMap<>();
for (final Data data : source) {
final int count = data.getCount();
data.setCount(0);
if (temp.get(data) == null) {
temp.put(data, count);
}
else {
temp.put(data, temp.get(data) + count);
}
}
final Set<Entry<Data, Integer>> set = temp.entrySet();
final LinkedList<Data> result = new LinkedList<>();
for (final Entry<Data, Integer> entry : set) {
final Data mergedData = entry.getKey();
mergedData.setCount(entry.getValue());
result.add(mergedData);
}
Collections.sort(result, new DataComparator());
return result;
}
给定已排序的两个单链表,合并这些列表。 示例: list1: 1 2 3 5 7 list2: 0 4 6 7 10 --- 尽管这个解决方案非常简单,并且有几个不同的问题实现,不管是否使用递归(如下所示http://www.geeksforgeeks.org/merge-two-sorted-linked-lists/见方法3), 我想知道这个实现有多复杂: 如果其中一个列表是空的,只需返回另一
问题内容: 我有两个列表需要合并,第二个列表忽略了第一个列表的重复项。..有点难以解释,所以让我展示一个代码看起来像什么,以及我想要什么的示例。 您会注意到结果具有第一个列表, 包括 其两个“ 2”值,但是second_list也具有附加的2和5值这一事实并未添加到第一个列表中。 通常,对于这样的事情,我会使用集合,但是first_list上的集合会清除它已经具有的重复值。所以我只是想知道什么是实
问题内容: 我有一个带有20个属性的Java类及其相应的getter和setters。我也有两个对象列表:和。 现在,我想合并两个列表,并避免基于和的重复对象。 使用Java 8: 但是我必须在哪里指定属性?我应该重写和方法吗? 问题答案: 如果要实现and ,则 在 类 内部 进行操作。在该类中添加类似的方法 如果您这样做了,在上调用将自动执行正确的操作。 如果您不想(或无法)更改类,则没有平等
我有两张单子。人类名单和超人名单。我想从这两个列表中创建一个列表,确保如果一个人是超人,那么它只会在使用Java8的列表中出现一次。有什么好办法吗?更新:这些是不同的类,即两者都不扩展另一个。我希望最后的名单是超人。如果一个人已经是超人了,我们就忽略了这个人类对象。如果人不是超人,我们就把人的物体变成超人的物体。理想情况下,我希望在最后按年龄对他们进行排序,这样我就可以得到一个按日期降序排列的超人
问题内容: 我有两个列表,其中包含许多相同的项目,包括重复的项目。我想检查第一个列表中的哪些项不在第二个列表中。例如,我可能有一个这样的列表: 还有一个像这样的列表: 比较这两个列表,我想返回第三个列表,如下所示: 我目前正在使用一些我之前确定的糟糕代码,我可以肯定它甚至无法正常工作,如下所示。 我怎样才能更好地完成这项任务? 问题答案: 您没有指定订单是否重要。如果没有,则可以在> = Pyth
在这里,我有两个项目列表,我想要合并到一个列表中,并在保存到数据库之前删除重复项。但是我得到一个错误,“非静态方法不能从静态上下文引用”。虽然我知道该消息的含义,但我不知道如何在Java8流的上下文中解决它。拜托,救命。 下面是错误消息的快照