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 链式的能不能写
回答:
不用 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;
}
回答:
兄弟,是不是想复杂了。来个逻辑简单清晰的办法吧。
// 源数据 List<Item> items = new ArrayList<>();
// 筛选出 Item2 里面的 num == 0的数据
List<Item> tempList = items.stream().filter(e -> e.getItem2().getNum() == 0).collect(Collectors.toList());
// 删除员数据中Item2 里面的 num == 0的数据
items.removeIf(e -> e.getItem2().getNum() == 0);
// 把Item2 里面的 num == 0的数据拼接在源数据后面
items.addAll(tempList);
以上是 java 排序问题? 的全部内容, 来源链接: utcz.com/p/944816.html