gpt4 book ai didi

java - API 21 中组合多种排序的最佳方式

转载 作者:行者123 更新时间:2023-12-02 02:01:29 25 4
gpt4 key购买 nike

我的目标是对由字符串和 boolean 值组成的对象列表应用两种排序。

我有帐户和 Activity/非 Activity 状态,因此我想首先显示 Activity (对 boolean 值进行排序),然后按字母顺序对其余元素进行排序。

例如:

[约翰,不活跃]、[克雷格,活跃]、[迈克,不活跃]、[丹尼斯,不活跃]

我想要:

[克雷格,活跃],[丹尼斯,不活跃],[约翰,不活跃],[迈克,不活跃]

我打算做的是使用 Comparable<> 但我想知道是否还有其他方法可以做到这一点。

我不想使用 Guava 或任何其他库。这也应该用于 Android API 21,因此不能使用 list.sort()。

提前致谢!

最佳答案

只需创建一个新的Comparator,如下所示:

public class AccountComparator implements Comparator<Account> {

@Override
public int compare(Account o1, Account o2) {
if (o1.isActive() && !o2.isActive()) {
return -1;
}
if (!o1.isActive() && o2.isActive()) {
return 1;
}
return o1.getName().compareTo(o2.getName());
}
}

最小测试示例:

public static void main(String[] args) {
Account account2 = new Account("B", true);
Account account4 = new Account("D", false);
Account account3 = new Account("C", true);
Account account1 = new Account("A", false);

List<Account> list = new ArrayList<>();
list.add(account1);
list.add(account2);
list.add(account3);
list.add(account4);

Collections.sort(list, new AccountComparator());

list.forEach(System.out::println);
}

预期输出

Account{name='B', active=true}
Account{name='C', active=true}
Account{name='A', active=false}
Account{name='D', active=false}

或者使用 lambda 表达式:(感谢 @Wow 使用 Comparator.comparing)

Collections.sort(list, Comparator.comparing(Account::isActive).reversed()
.thenComparing(Account::getName));

关于java - API 21 中组合多种排序的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51508242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com