【问题标题】:How to sort an ArrayList on more than one field [duplicate]如何在多个字段上对 ArrayList 进行排序[重复]
【发布时间】:2021-11-20 12:32:42
【问题描述】:

我有ArrayList<Item> itemListItem 类包含两个字段:char firstLetterchar secondLetter

如果我想在firstLetter 上对itemList 进行排序,代码将是

 Collections.sort(itemList, new Comparator<Item>() {
        @Override
        public int compare(Item o1, Item o2) {
            char order1 = o1.getFirstLetter();
            char order2 = o2.getFirstLetter();
            return Character.compare(order1,order2);
        }
    });

但是,在同一排序操作中,我希望 itemList 也根据 secondLetter 进行排序。因此,itemsfirstLetter 具有相同值的 items 将根据它们的 secondLetter 值在它们之间进行排序。上面的代码应该如何修改?

【问题讨论】:

标签: java android


【解决方案1】:

你可以试试这个。

Collections.sort(itemList, new Comparator<Item>() {
    @Override
    public int compare(Item o1, Item o2) {
        char order1 = o1.getFirstLetter();
        char order2 = o2.getFirstLetter();

        char order3 = o1.getSecondLetter();
        char order4 = o2.getSecondLetter();

        String first = String.valueOf(order1)+String.valueOf(order3)
        String second= String.valueOf(order2)+String.valueOf(order4)

        return first.compareTo(second);
    }
});

嵌入式解决方案应如下所示:

Collections.sort(itemList, new Comparator<Item>() {
    @Override
    public int compare(Item o1, Item o2) {
        char order1 = o1.getFirstLetter();
        char order2 = o2.getFirstLetter();

        char order3 = o1.getSecondLetter();
        char order4 = o2.getSecondLetter();

        int compare = Character.compare(order1,order2);

        if(compare == 0){
            return Character.compare(order3,order4);
        } else {
            return compare;
        }
    }
});

【讨论】:

  • 我什至不必尝试就知道这个出色的 hack 会奏效。我一直在寻找一个嵌入式解决方案,但这肯定也能完成这项工作。谢谢。
  • @RedKnight 如果此解决方案对您有所帮助,请接受并投票,以便它可以帮助社区中的其他人。谢谢
  • 不能。我的声望太低了。
  • @RedKnight 你不能投票,但你肯定可以接受。 stackoverflow.com/help/someone-answers
  • 你是对的。完毕。您的嵌入式解决方案看起来也很棒。
猜你喜欢
  • 2011-05-03
  • 2012-03-31
  • 1970-01-01
  • 2012-02-03
  • 1970-01-01
  • 2013-07-05
  • 2013-08-28
  • 2013-04-20
  • 1970-01-01
相关资源
最近更新 更多