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

回到顶部