加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 使用特定顺序对(数组)列表进行排序

发布时间:2020-12-15 02:55:12 所属栏目:Java 来源:网络整理
导读:我有一个对象列表,我想用定义的顺序对它进行排序. 对于前者我有一个字段字符串颜色的对象.我想在颜色字段上对我的列表进行排序,使它总是首先是白色而不是蓝色而不是其他所有(如果可能的话,alph.有序但不是必需的): Before sorting: After sorting:orange wh
我有一个对象列表,我想用定义的顺序对它进行排序.
对于前者我有一个字段字符串颜色的对象.我想在颜色字段上对我的列表进行排序,使它总是首先是白色而不是蓝色而不是其他所有(如果可能的话,alph.有序但不是必需的):
Before sorting:         After sorting:
orange                  white
white                   blue
green                   yellow
brown                   orange
yellow                  black
black                   brown
...                     ...

有这么简单的方法吗?

编辑:

我必须添加一个更复杂的…如果可以有更多颜色具有相同的名称/基数怎么办?对于前者whiteX,whiteY,whiteZ,blueA,blueB,……所有的白人都必须比所有的黄色首先出现,而不是所有的黄色.用比较器解决这个问题仍有可能吗? (我无法想象……)

解决方法

是的,您可以创建一个 Comparator来创建排序策略,或者定义实现 Comparable的类的自然顺序

作为旁注:

It is strongly recommended,but not strictly required that
(x.compareTo(y)==0) == (x.equals(y))

使用比较器的示例:

class MyClass {

private Color color;
private String someOtherProperty;
public static final Comparator<MyClass> colorComparator = new MyComparator();

//getter and setter

static class MyComparator implements Comparator<MyClass>{

            @Override
            public int compare(MyClass o1,MyClass o2) {
                // here you do your business logic,when you say where a color is greater than other
            }    
}

}

并在客户端代码中.

例:

List<MyClass> list = new ArrayList<>();
//fill array with values
Collections.sort(list,MyClass.colorComparator );

阅读更多:Collections#sort(..)

如果你想定义你的类的自然顺序,只需定义

public class MyClass implements Comparable<MyClass>{

        @Override
        public int compareTo(MyClass o) {
           // do business logic here
        }
}

并在客户端代码中:

Collections.sort(myList); // where myList is List<MyClass>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读