java - 比较来自 CSV 的两个数组列表

标签 java arrays sorting arraylist

我有一个一般性问题:

在以下情况下,根据彼此的值对两个数组列表进行排序的最佳方法是什么:

(1) 每个 arrayList 只包含导入的 CSV 的一列(通过 inputStream 和 bufferReader(为了简单起见,我不会在下面打印)。

//my arrayLists:

List <String> OpenVal = new Arraylist ();
List <String> CloseVal = new Arraylist();


//lists from above contain column 0 and 1 from CSV:
while((reader.readLine()) != null) {

Sting line = "";
String ColTwo [] = line.split(",");
openVal.add(colOne[1]);
closVal.add(colOne[2]);

(2) 为了进一步清楚,CSV [colOne [1], colOne [2] 的每一列都包含以下信息:

//colOne [1]  colOne [2]
   date        value
   friday       32
   tues         21
   wed          5

(3) 我会这样排序(按值):

//colOne [1]  colOne [2]
   date        value
   wed          5
   tues         21
   friday       32

(4) 我没有发现比较器类是高效的,因为我不需要将信息写入 arraylist 的构造函数。该列表以 CSV 为前缀。

(3) 比较两个列表的最佳方式是什么?

最佳答案

如果您的 csv 每个日期只包含一行,您可以将数据存储到 map 而不是列表:

Map<String,Integer> myMap = new HashMap<>();
String line;
while((line = reader.readLine()) != null) {
    myMap.put(line.split(",")[0], Integer.parseInt(line.split(",")[1]));
}

之后您可以对 map 进行排序:

Map<String,Integer> sorted = myMap.entrySet().stream().
                             sorted(Map.Entry.comparingByValue()).
                             collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,(e1, e2) -> e1,LinkedHashMap::new));

并打印您的排序 map :

sorted.entrySet().forEach(System.out::println);

或如 DodgyCodeException 所评论,阅读您的行至 List<String[]> :

List<String[]> myList = new ArrayList<>();
    String line = "";
    while((line = reader.readLine()) != null) {
        myList.add(line.split(","));
}

并排序:

    Collections.sort(myList, new Comparator<String[]>() {
        @Override
        public int compare(String[] o1, String[] o2) {
            return Integer.compare(Integer.parseInt(o1[1]), Integer.parseInt(o2[1]));
        }
    });

最后使用 for 循环打印列表,例如:

for(String[] row : myList){
    System.out.println(row[0] +" : "+ row[1])
}

关于java - 比较来自 CSV 的两个数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53484731/

相关文章:

java - 反序列化 json 时从 JsonArray 中排除 NULL

java - toArray(new MyObject[size]) 与遍历列表并填充数组

java - 如何在 Eclipse 中编译以便我可以在外部使用? (不打开 eclipse )

java - 让音频流在 Java 中工作,获取格式错误的 URL 异常

c++ - 将节点数组传递给函数并返回节点数组

java - 为什么 @ResponseBody 返回已排序的 LinkedHashMap 未排序?

javascript - jQuery 遍历字符串数组中的字符并找到它的索引

java - 向数组添加边框

javascript - 通过在 javascript 中连接对象数组,排序或插入效率更高吗?

java - 选择排序和冒泡排序——如何统计比较次数和交换次数?