我有一个arraylist如下
100 AAA 500-1 Lorem Ipsum
100 BBB 500-2 Lorem Ipsum
101 AAA 500-1 Lorem Ipsum
101 AAA 500-2 Lorem Ipsum
100 BBB 500-3 Lorem Ipsum
我希望将其排序为
101 AAA 500-1 Lorem Ipsum
101 AAA 500-2 Lorem Ipsum
100 AAA 500-1 Lorem Ipsum
100 BBB 500-2 Lorem Ipsum
100 BBB 500-3 Lorem Ipsum
首先,按编号(101,100)递减。
其次,用三个字母(AAA,BBB)升序。
第三,按第三栏(500-1,500-2,500-3)递增
我可以按空格分割每个元素并获得单独的单词和排序。但任何人都可以用任何其他方式或已知算法帮助我吗? 如果您需要更多信息,请与我们联系。
提前谢谢。
答案 0 :(得分:7)
创建Comparator将解决您的问题。 你应该实现这样的东西:
public class MyComparator implements Comparator<MyObject> {
public int compare(MyObject o1, MyObject o2) {
if (o1 == null || o2 == null) {
throw new NullPointerException();
}
if (o1.getValue1() != o2.getValue1()) {
return Integer.compare(o1.getValue1(), o2.getValue1());
}
return Integer.compare(o1.getValue2(), o2.getValue2());
}
}
当然,有更多方法可以解决这个问题,例如,您可以实现自己的排序算法。但是,我认为使用Comparator
是正确的“ java-way ”来解决它。
答案 1 :(得分:2)
我假设您有Collection
String
。
我将使用Comparator来解决它。
List<String> myCollection = new ArrayList<String>();
Collections.sort(myCollection, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
// splitting it with space character
String[] split1 = o1.split(" ");
String[] split2 = o2.split(" ");
int i1 = Integer.parseInt(split1[0]);
int i2 = Integer.parseInt(split2[0]);
int diff = (i2 - i1);
if(diff != 0){ // if two integer are equal
return diff;
}else{
return split2[1].compareTo(split1[1]);
}
}
});
答案 2 :(得分:0)
您需要为此实现Comparator,并将其传递给容器的sort()方法。