当前位置: 首页 > 知识库问答 >
问题:

排序数组列表[重复]

谭昱
2023-03-14
List<String> words = new ArrayList<>();  
words.add("9 hello");
words.add("98 food");
words.add("105 cat");
words.add("2514 human");
words.add("3 pencil");
words.sort(Comparator.reverseOrder());
"2514 human"
"105 cat"
"98 food"
"9 hello"
"3 pencil"
"98 food"
"9 hello"
"3 pencil"
"2514 human"
"105 cat"

共有1个答案

司马飞鸿
2023-03-14

我认为您应该创建一个类来表示列表中的元素。例如:

public class WordCount {
    public static final Comparator<WordCount> BY_COUNT;

    private static final Pattern PATTERN
            = Pattern.compile("\\s*([0-9]+)\\s+(.*)");

    public final int count;
    public final String word;

    public static WordCount parse(String s) {
        Matcher matcher = PATTERN.matcher(s);
        if (!matcher.matches()) {
            throw new IllegalArgumentException("Syntax error: " + s);
        }
        return new WordCount(
                Integer.parseInt(matcher.group(1)), matcher.group(2));
    }

    public WordCount(int count, String word) {
        this.count = count;
        this.word = word;
    }

    @Override
    public String toString() {
        return count + " " + word;
    }

    static {
        BY_COUNT = (WordCount o1, WordCount o2) -> {
            int r = Integer.compare(o1.count, o2.count);
            if (r == 0) {
                r = o1.word.compareTo(o2.word);
            }
            return r;
        };
    }
}

您的代码将变成:

    List<WordCount> words = new ArrayList<>();  
    words.add(WordCount.parse("9 hello"));
    words.add(WordCount.parse("98 food"));
    words.add(WordCount.parse("105 cat"));
    words.add(WordCount.parse("2514 human"));
    words.add(WordCount.parse("3 pencil"));
    words.sort(WordCount.BY_COUNT.reversed());
    words.forEach((wc) -> {
        System.out.println(wc);
    });

结果如下:

2514 human
105 cat
98 food
9 hello
3 pencil
 类似资料:
  • 我有一个点列表,每个点都是一个大小为2的小列表。我想按x的递增顺序对点列表进行排序,如果x值相等,我就按y的递减顺序排序来打破平局。 我编写了一个自定义比较器来对点进行排序,如下所示: 以下是排序前的输入: 以下是使用上述比较器排序后产生的结果: 观察:- 输入按x的升序排序。 (5,12)被正确地放在(5,10)之前 (9,-15)被正确地放在(9,-1000)之前 然而,(10001,-10)

  • 我有一个java中的double列表,我想按降序排列ArrayList。 输入ArrayList如下所示: 输出应该是这样的

  • 我有长ID的数组列表 我有一个具有

  • 问题内容: 我有以下课程。在此,虹膜是具有某些属性的另一类。 我想对此数组列表进行排序(即列表 helperList),基于距离参数降序。我已经编写了以下方法,但是它不起作用。 有人可以提出解决方案吗? 问题答案: 为什么不让您的类实现接口,然后使用Collections类提供的内置排序方法。 我认为这可以解决问题。另外,此方法是稳定的。 http://docs.oracle.com/javase

  • 我想用java对数字数组列表进行排序,所以基本上如果我有以下数组列表: 输出应为: arraylist应该根据第一个键然后第二个键进行排序。

  • 我有一个程序,它接受一个单词和一个文本文件字典,并在字典中搜索与给定单词相等的单词组合(是字母表)。 我最后得到了一个字符串数组的Arraylist,每个数组都是一个包含它所使用的单词的解决方案,Arraylist是所有的解决方案。 它首先按字长(降序)排序,然后对等长字使用字母排序。 我现在对各个数组进行了排序,但我正试图按照某些规则在arraylist中对它们进行排序: 按字数递增 对于包含相