java 排序问题?

作者站长头像
站长
· 阅读数 13
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个回答
avatar
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;
}
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容