【发布时间】:2017-07-21 06:00:45
【问题描述】:
我想比较两个不同数组列表的键说
List<DataSt> list1 = new ArrayList<DataSt>();
List<DataSt> list2= new ArrayList<DataSt>();
DataSt 是:
public class DataSt {
public String key;
BigDecimal time;
BigDecimal memory;
public DataSt(String key,BigDecimal time, BigDecimal memory)
{
this.key=key;
this.time=time;
this.memory=memory;
}
}
列表1:
<org.openjdk.jmh.samples.JMHSortBenchmark.collectionsSort,6691.679,5454>
<org.openjdk.jmh.samples.JMHSortBenchmark.abcdSort,5151.45,54545>
<org.openjdk.jmh.samples.JMHSortBenchmark.saasSort,5454.54,21212.2>
<org.openjdk.jmh.samples.JMHSortBenchmark.xyzSort,888.22,2115>
列表2:
<org.openjdk.jmh.samples.JMHSortBenchmark.xyzSort,7448.362,7887.2>
<org.openjdk.jmh.samples.JMHSortBenchmark.abcdSort,951.5,4512.5>
<org.openjdk.jmh.samples.JMHSortBenchmark.lmnSort,4454.54,455.2>
如果它们匹配,例如“org.openjdk.jmh.samples.JMHSortBenchmark.xyzSort”,所以我想返回 list1 和 list2 的 <Key,time,memory>,即它必须返回
org.openjdk.jmh.samples.JMHSortBenchmark.xyzSort,888.22,2115
org.openjdk.jmh.samples.JMHSortBenchmark.xyzSort,7448.362,7887.2
org.openjdk.jmh.samples.JMHSortBenchmark.abcdSort,5151.45,54545
org.openjdk.jmh.samples.JMHSortBenchmark.abcdSort,951.5,4512.5
因为我想处理它们的值之间的差异并比较它们,即 list1 中的 888.2,2115 和 map2 中的 7448.362,7887.2,从而将差异记录到 csv 文件中。
我使用了以下代码:
public static List<DataSt> outputComparator(List<DataSt> list1, List<DataSt> list2) {
List<DataSt> map4 = new ArrayList<DataSt> ();
for (DataSt entry: list1) {
if (list2.contains(entry.key)) {
saveRecord(entry, **//Here I want to return DataSt of list2//**,entry.key,map4);
} else {
saveRecord(entry.key, map4);
}
}
for (DataSt entry: list2) {
if (!(list1.contains(entry.key))) {
saveRecord(entry.key, map4);
}
}
return map4;
}
语句"saverecord" 中的"entry" 为该运行返回"list1.key, list1.time, list1.value"
这里我不知道如何获得"DataSt part of list2"。有人可以帮我在"list1.key == list2.key" 时如何检索"list2.key, list2.time, list2.value"(请参阅 saveRecord() 中的注释字段)。
【问题讨论】:
-
list2.contains(entry.key)将始终为假,因为list2包含DataSt类型的对象,而entry.key是String,它们永远不会相等。 --- 看到名为map4的List也很奇怪,特别是因为实际的Map<String, DataSt>更容易用于此目的。 -
如果
list2中的列表元素等于entry.key,list2.contains(entry.key)返回true。由于list2的元素是DataSt,而entry.key是String,它们永远不会相等,list2.contains(...)总是返回 false。 -
谁要求你改变它,为什么?
-
另外,如果您需要
List,这并不意味着您不能同时拥有Map。我遇到过不止一种情况,我需要在两个集合中保留相同的数据。 -
“是否不可能比较两个列表并检索值”...如果没有
Map或Set,这是可能的,但效率低且笨重。
标签: java list csv arraylist key