我想基于两个属性对列表进行排序,但在某些条件下。 下面的类有两个属性 - memberid,membernumber。价值如下。
obj ()
{
memberid;
membernumber;
}
Values Assigned :
obj1 = {1,15}
obj2 = {3,10}
obj3 = {2,20}
obj4 = {2,10}
obj5 = {3,15}
obj6 = {4,25}
obj7 = {2,50}
我们需要排序为:
首先根据memberId
对其进行排序,如果成员ID相同,那么基于membernumber
最高membernumber
的成员ID应该排在第一位。所以输出应该是:
obj1 = {1,15}
obj7 = {2,50} >> As 2 are multiple sort on membernumber as highest being 50
obj3 = {2,20}
obj4 = {2,10}
obj5 = {3,15}
obj2 = {3,10}
obj6 = {4,25}
我可以使用collections.sort基于MemberId对其进行排序,但我不确定如何使用相同的条件并根据MemberNumber对其进行排序。
感谢任何帮助。
我在Collections.sort()
中使用的排序类。
public class sortId implements Comparator<obj > {
public int compare(obj o1, obj o2)
{
int id1 = o1.getmemberId();
int id2 = o2.getmemberId();
return id1 - id2 ;
}
}
答案 0 :(得分:2)
您可以使用比较器界面进行自定义排序,并使用嵌套逻辑覆盖比较方法。
答案 1 :(得分:2)
您可以使用Collections.sort
,并按降序排序,您可以使用负数来反转您的排序:
List<obj> list = Arrays.asList(new obj(1, 15), new obj(3, 10), new obj(2, 20),
new obj(2, 10), new obj(3, 25), new obj(2, 50));
Collections.sort(list, new Comparator<obj>() {
@Override
public int compare(obj o1, obj o2) {
if (o1.getMemberid() != o2.getMemberid()) {
return o1.getMemberid() - o2.getMemberid();
} else {
//for the second sort you can use negative to sort descending
return -(o1.getMembernumber() - o2.getMembernumber());
// ^-------------------------------------------------------
}
}
});
<强>输出强>
[{1,15}, {2,50}, {2,20}, {2,10}, {3,25}, {3,10}]
答案 2 :(得分:1)
您可以使用Comparator中的静态方法,然后在thenComparing
之后考虑comparing
。例如。如果您的列表是objs
并且具有相应的getter:
objs.sort(comparingInt(Obj::getMemberid)
.thenComparing(comparingInt(Obj::getMembernumber).reversed()));
或者
objs.sort(comparingInt(Obj::getMemberid)
.thenComparing(Obj::getMembernumber, reverseOrder()));
请注意.reversed()
或reverseOrder()
如何使用membernumber
的降序排序,memberid
的默认升序。
答案 3 :(得分:0)
你的代码就在那里。你错过的是第一次检查是相同的情况,所以你应该实现类似的东西:
public int compare(obj o1, obj o2)
{
int id1 = o1.getmemberId();
int id2 = o2.getmemberId();
if (id1 == id2) {
// check other condition, return result
}
else {
return id1 - id2;
}
}
作为旁注:遵循命名约定,并在CamelCase中命名您的类(Obj
而不是obj
)