使用Java 8 Lambda按不同元素对数组列表进行排序

Hun*_*ton 3 java sorting lambda list java-8

如果我的List<String[]>每个人String[]都如下所示:{FirstName,LastName,Income,City}我将如何使用Java 8 lambda通过特定值(例如收入或名字)对列表进行排序?

Mat*_*ich 5

这是几个例子。将下面的前两个示例中的x替换为您要用于排序的字段的索引。

Collections.sort(personList, (p1, p2) -> p1[x].compareTo(p2[x]));
Run Code Online (Sandbox Code Playgroud)

要么

personList.sort((p1, p2) -> p1[x].compareTo(p2[x]);
Run Code Online (Sandbox Code Playgroud)

另外,我也同意@Robin Topper的评论。 如果需要lambda(并且您想按名字排序),则可以使用:

Collections.sort(personList, (p1, p2) -> p1.getFirstName().compareTo(p2.getFirstName()));
Run Code Online (Sandbox Code Playgroud)

要么

personList.sort((p1, p2) -> p1.getFirstName().compareTo(p2.getFirstName()));
Run Code Online (Sandbox Code Playgroud)

还可以考虑使用Robin的注释中的可比较实现和允许排序的数据结构。

  • 或`Comparator.comparing(Person :: getFirstName)`。 (8认同)
  • 同样,对于数组大小写,为“ Comparator.comparing(a-&gt; a [x])”。无论哪种情况,“ Comparator.comparing”都确保比较的两端使用相同的功能,从而避免了复制和粘贴错误等。 (4认同)
  • 我建议的`Person`类将使用getter和setter代替公共字段;-) (2认同)