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.4k
2 个回答

不用 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);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题