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






