Java List排序:将num为0的元素移至末尾
本文介绍如何使用Java对Listsort
方法更简洁高效。
解决方案:自定义比较器
我们可以通过创建一个自定义比较器来实现此排序需求:
items.sort((o1, o2) -> {
int num1 = o1.getItem2().getNum();
int num2 = o2.getItem2().getNum();
if (num1 == 0 && num2 != 0) {
return 1; // 将num1为0的元素排在后面
} else if (num1 != 0 && num2 == 0) {
return -1; // 将num2为0的元素排在后面
} else {
return 0; // num1和num2都为0或都不为0,保持原有顺序
}
});
这段代码利用lambda表达式定义了一个比较器。它首先获取o1
和o2
的Item2.num
值,然后根据num
值是否为0进行比较,将num
为0的元素排序到末尾。
完整示例代码
以下是一个完整的可运行示例,包含了Item
和Item2
类以及测试数据:
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class ItemSorter {
public static void main(String[] args) {
List- items = generateSampleData();
System.out.println("排序前:");
printNums(items);
items.sort((o1, o2) -> {
int num1 = o1.getItem2().getNum();
int num2 = o2.getItem2().getNum();
if (num1 == 0 && num2 != 0) {
return 1;
} else if (num1 != 0 && num2 == 0) {
return -1;
} else {
return 0;
}
});
System.out.println("n排序后:");
printNums(items);
}
private static void printNums(List
- items) {
for (Item item : items) {
System.out.print(item.getItem2().getNum() + " ");
}
System.out.println();
}
private static List
- generateSampleData() {
List
- items = new ArrayList<>();
Random random = new Random();
for (int i = 0; i < 10; i++) {
items.add(new Item(i, "Item " + i, new Item2(i, random.nextInt(3)))); // 生成0-2之间的随机数
}
return items;
}
}
class Item {
private long id;
private String title;
private Item2 item2;
public Item(long id, String title, Item2 item2) {
this.id = id;
this.title = title;
this.item2 = item2;
}
public Item2 getItem2() {
return item2;
}
}
class Item2 {
long id;
int num;
public Item2(long id, int num) {
this.id = id;
this.num = num;
}
public int getNum() {
return num;
}
}
这个示例生成了包含随机num
值(包括0)的Item
列表,并演示了排序前后num
值的差异。 此方法清晰、简洁且高效地解决了问题。