java 排序问题?
public class Item {
private long id;
private String title;
private Item2 item2;
}
public class Item2 {
private long id;
private long num;
}
现在有一个 List<Item> items
排序。
要求是 Item2
里面的 num == 0
放在最后,其他不变
用那种 java 8 链式的能不能写
回复
1个回答

test
2024-07-16
不用 lambada,用 sort 就可以。
items.sort((o1, o2) -> {
if (o1.item2.num == 0) {
return 1;
} else if (o2.item2.num == 0) {
return -1;
} else {
return 0;
}
});
完整代码,用到 hutool 的 RandomUtil:
public class Item {
private long id;
private String title;
private Item2 item2;
public static void main(String[] args) {
List<Item> items = new ArrayList<>();
for (int i = 0; i < 10; i++) {
Item item = new Item();
item.id = i;
item.title = String.valueOf(i);
item.item2 = new Item2();
item.item2.id = i;
item.item2.num = RandomUtil.randomInt(100);
if (i == 5) {
item.item2.num = 0;
}
items.add(item);
}
items.sort((o1, o2) -> {
if (o1.item2.num == 0) {
return 1;
} else if (o2.item2.num == 0) {
return -1;
} else {
return 0;
}
});
for (Item item : items) {
System.out.println(item.item2.num);
}
}
}
class Item2 {
long id;
long num;
}
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容