Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 列出键比较和返回值_Java_List_Csv_Arraylist_Key - Fatal编程技术网

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>