列出关键比较和返回值

时间:2017-07-21 06:00:46

标签: java list csv arraylist key

我想比较两个不同的arraylists的键说

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;
    }
}

list1的:

<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>

list2:

<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>

如果他们匹配例如,&#34; org.openjdk.jmh.samples.JMHSortBenchmark.xyzSort&#34;所以我想返回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;
    }

语句"entry"中的"saverecord"会为该次运行返回"list1.key, list1.time, list1.value"

我不知道如何获得"DataSt part of list2"。有人可以帮助我在"list2.key, list2.time, list2.value"时如何检索"list1.key == list2.key"(请参阅saveRecord()中的注释字段)。

1 个答案:

答案 0 :(得分:0)

list2.contains(entry.key)并不能按照您的想法行事。它不知道DataSt.key实际上是一个关键。您正在尝试将String对象与DataSt对象匹配(这将永远不会起作用)。

您可以覆盖equals只是比较密钥,或者您可以编写自己的DataSt findItem(ArrayList<DataSt> list, String key)

如果你真的需要键控数据,你可以查看一个不同的结构,你可以通过键实际查找。