Java 列出键比较和返回值
我想比较两个不同数组列表的键Java 列出键比较和返回值,java,list,csv,arraylist,key,Java,List,Csv,Arraylist,Key,我想比较两个不同数组列表的键 List<DataSt> list1 = new ArrayList<DataSt>(); List<DataSt> list2= new ArrayList<DataSt>(); <org.openjdk.jmh.samples.JMHSortBenchmark.xyzSort,7448.362,7887.2> <org.openjdk.jmh.samples.JMHSortBenchmark.a
List<DataSt> list1 = new ArrayList<DataSt>();
List<DataSt> list2= new ArrayList<DataSt>();
<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>
清单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>
<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>
因为我想处理它们的值之间的差异并比较它们,即列表1中的888.22115和map2中的7448.3627887.2,从而将差异记录到csv文件中
<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,7448.362,7887.2>
<org.openjdk.jmh.samples.JMHSortBenchmark.abcdSort,951.5,4512.5>
<org.openjdk.jmh.samples.JMHSortBenchmark.lmnSort,4454.54,455.2>
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;
}
公共静态列表输出比较器(列表1、列表2){
List map4=newarraylist();
对于(数据集条目:列表1){
if(list2.contains(entry.key)){
saveRecord(条目,**/这里我想返回list2的DataSt//**,条目.key,map4);
}否则{
保存记录(entry.key,map4);
}
}
对于(数据集条目:列表2){
如果(!(list1.contains(entry.key))){
保存记录(entry.key,map4);
}
}
返回map4;
}
语句“saverecord”
中的“entry”
为该运行返回“list1.key、list1.time、list1.value”
<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>
在这里,我不知道如何获取列表2的数据集部分。有人能帮助我在“list1.key==list2.key”
时如何检索“list2.key,list2.time,list2.value”
(请参阅saveRecord()中的注释字段) list2.contains(entry.key)
并不像您想象的那样。它不知道DataSt.key
实际上是一个键。您正在尝试将字符串对象与DataSt对象相匹配(这永远不会起作用)
<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>
您可以覆盖equals
来比较键,或者您可以编写自己的DataSt findItem(ArrayList list,String key)
<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>
如果您确实需要键入的数据,您可以查看另一个结构,在那里您可以按键进行实际查找。
list2.contains(entry.key)
将始终为false,因为list2
包含类型为DataSt
和entry的对象。key
是一个字符串,它们永远不相等。--看到名为map4
的列表
也很奇怪,特别是因为实际的映射
更易于使用。list2.contains(entry.key)
如果list2
中的列表元素等于entry.key,则返回true
。由于list2
的元素是DataSt
和entry。key
是字符串
,它们永远不会相等,list2.contains(…)
总是返回false。是谁要求您更改它的,为什么?另外,如果您需要列表
,这并不意味着您不能同时拥有映射
。我遇到过不止一种情况,我需要在两个集合中保存相同的数据。“不可能比较两个列表并检索值吗”。。。这是可能的,但如果没有映射
或集
,则效率低下且笨拙。覆盖等于
似乎是个坏主意。还有更好的方法。在我看来,建议继续对列表进行顺序搜索是一种糟糕的形式。@Andreas所以我将两个列表复制到两个新的哈希映射中,其中ListSt有时间、内存。有了这个,我得到了我问题的答案。这是最好的方法吗?@Andreas检查一下,如果有,请提出优化建议。。。。
<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>