【问题标题】:Sort ArrayList data [closed]对ArrayList数据进行排序[关闭]
【发布时间】:2016-08-13 15:41:42
【问题描述】:

我正在准备考试。我可以读取 CSV 文件,但我不知道如何对数据行进行排序。

例如,如果“SchoolName.csv”有

Cayuga,Elkhart,Slocum,Westwood                                            
Neches,Palestine,central
Dibolon
Lufkin,Holiday

我对数据进行排序后,输出应该是

Dibolon // becuase it only contain one name.
Lufkin,Holiday
Neches,Palestine,central
Cayuga,Elkhart,Slocum,Westwood

【问题讨论】:

  • 您想按一行中的姓名数量排序吗?
  • 是的;我想按@GuiSim 包含多少个名字排序

标签: java database sorting


【解决方案1】:

所以你想根据元素的数量进行排序。假设您在 Collection<String> csvlines 中有这些元素:

csvlines.stream()
.sorted(Comparator.comparing(line -> StringUtils.countMatches(line, ",")))
.collect(Collectors.toList())

【讨论】:

  • 我建议在您的sorted() 中使用Comparator.comparing(line -> StringUtils.countMatches(line, ","))
  • 你是对的!谢谢。
【解决方案2】:

如果你想根据名字的数量对每一行进行排序,你可以这样做

// Read the file's lines
List<String> lines = Files.readAllLines(pathToFile);

List<String> sortedLines = lines.stream().sorted(Comparator.comparing(line -> line.split(",").length)).collect(Collectors.toList());

【讨论】:

  • Files.lines(...) 可以用来代替Files.readAllLines(...).stream()
【解决方案3】:

定义一个比较器,这是一个扩展比较器的类,并将其作为参数传递给arraylistname.sort(comparator);

如果第一个参数小于、等于或大于第二个参数,比较器将返回负整数、零或正整数。

所以

class CompareByLength implements Comparator {
   compare(list a, list b) {
      return a.size()-b.size();
   }
}

如果您希望您的列表顺序相反,也可以使用 b.size()-a.size()

【讨论】:

    猜你喜欢
    • 2014-02-18
    • 2017-03-15
    • 2018-03-25
    • 2014-05-05
    • 1970-01-01
    • 2018-05-07
    • 2017-07-06
    • 1970-01-01
    • 2017-07-22
    相关资源
    最近更新 更多