这个问题在这里已经有答案了:
如何使用多个排序条件对arraylist排序(7个答案)上个月关门了。我有一个arraylist,其中包含以下值:是-2信息技术-2第-2页次-2第-2页最佳-1最差-1这个列表刚刚按字符串末尾的计数值排序(使用选择排序),但是现在我想按字母顺序对具有相同计数值的单词排序,我不知道怎么做。所以预期的输出应该是
[it - 2, of - 2, the - 2, times - 2, was - 2, best - 1, worst - 1]
mi7gmzs61#
1:- With Use Comparator Collections.sort(creatorIdList, (Object o1,Object o2)->{ //return 0; });
rbl8hiat2#
对于排序,通常有两种方法:使班级 Comparable 使用 Comparator 我假设你的价值观是类似于
Comparable
Comparator
public class Entry { private final String text; private final int count; // getters, constructor, toString, ... }
对于第一个选项,只需让您的类实现 Comparable 首先使用 count 然后,如果相等,考虑 text .
count
text
public class Entry implements Comparable<? extends Entry> { private final String text; private final int count; // getters, constructor, toString, ... @Override public int compareTo(Entry other) { int countResult = -1 * Integer.compare(count, other.count); return countResult != 0 ? countResult : text.compareTo(other.text); } }
然后只需对您的收藏进行排序:
Collections.sort(entries);
这个 -1 * 是通过计数降序而不是默认的升序来获得排序。
-1 *
你也可以使用 Comparator . 幸运的是,自java 8以来,我们得到了一些很好的帮助程序方法,使这变得更加简单,下面是代码:
Comparator<Entry> comparator = Comparator.comparingInt(Foo::getValue()) .reversed() .thenComparing(Foo::getText());
然后你把它交给分拣员:
entries.sort(comparator);
jhdbpxl93#
把绳子分开 \s+-\s+ 表示一个或多个空格字符(即。 \s+ )之后是 - 依次后跟一个或多个空格字符。对数字(第二)部分的降序执行第一级比较,然后对第一部分的升序执行第二级比较。
\s+-\s+
\s+
-
import java.util.ArrayList; import java.util.Comparator; import java.util.List; public class Main { public static void main(String args[]) { List<String> list = new ArrayList<>( List.of("was - 2", "it - 2", "the - 2", "times - 2", "of - 2", "best - 1", "worst - 1")); list.sort(new Comparator<String>() { @Override public int compare(String s1, String s2) { String[] s1Parts = s1.split("\\s+-\\s+"); String[] s2Parts = s2.split("\\s+-\\s+"); int i = Integer.compare(Integer.parseInt(s2Parts[1]), Integer.parseInt(s1Parts[1])); if (i != 0) { return i; } return s1Parts[0].compareTo(s2Parts[0]); } }); System.out.println(list); } }
输出:
注意:如果每个字符串的两个部分总是用 - ,可以拆分为 s1.split(" - "); .
s1.split(" - ");
3条答案
按热度按时间mi7gmzs61#
rbl8hiat2#
概述
对于排序,通常有两种方法:
使班级
Comparable
使用Comparator
我假设你的价值观是类似于可比
对于第一个选项,只需让您的类实现
Comparable
首先使用count
然后,如果相等,考虑text
.然后只需对您的收藏进行排序:
这个
-1 *
是通过计数降序而不是默认的升序来获得排序。比较器
你也可以使用
Comparator
. 幸运的是,自java 8以来,我们得到了一些很好的帮助程序方法,使这变得更加简单,下面是代码:然后你把它交给分拣员:
jhdbpxl93#
把绳子分开
\s+-\s+
表示一个或多个空格字符(即。\s+
)之后是-
依次后跟一个或多个空格字符。对数字(第二)部分的降序执行第一级比较,然后对第一部分的升序执行第二级比较。
输出:
注意:如果每个字符串的两个部分总是用
-
,可以拆分为s1.split(" - ");
.