一、List集合转换成Set集合
Set<@NotNull Long> ids =entityList.stream().filter(e -> e != null).map(UserCopyPointEntity::getPointId).collect(Collectors.toSet());
二、集合map的循环
map.forEach((k, v) -> {
System.out.println(k + "----" + v);
});
三、集合排序,名称排序,顺序排序
if (result.size() > 0) {
// 楼层排序, 从小到大排序, null排最后
Collections.sort(result,
Comparator.nullsLast(Comparator.comparing(FloorLatestPointMeterVO::getFloorLevel,
Comparator.nullsLast(Integer::compareTo))));
// 名称排序, 顺序排序, null排最后
for (int i = 0; i < result.size(); i++) {
Collections.sort(result.get(i).getPoints(),
Comparator.nullsLast(Comparator.comparing(LatestPointMeterVO::getName,
Comparator.nullsLast(SystemConstant.COLLATOR::compare))));
}文章来源:https://www.toymoban.com/news/detail-587873.html
}
Comparator.nullsLast使用含义
你应该使用Comparator.nullsLast两次:
list.sort(nullsLast(comparing(Bean::getVal, nullsLast(naturalOrder()))));
首先
nullsLast将处理Bean对象为null 时的情况.
第二个
nullsLast将处理返回值为Bean::getValnull时的情况.
如果你确定null列表中没有任何值,那么你可以省略第一个nullsLast(如@Holger所述):
list.sort(comparing(Bean::getVal, nullsLast(naturalOrder())));
或者,如果 bean 永远不是 `null`,则省略外部的 `nullsLast`,即只有属性值可能是 `null`。
多属性排序
if (dtos.isEmpty()) {
return dtos;
}
// 楼幢楼层名称进行排序优先级一,在设备名称排序优先级二, 顺序排序, null排最后
if (dtos.size() > 1) {
dtos.sort(Comparator.nullsLast(Comparator.comparing(PointMonthEnergyIncrementValue::getBuildingName, Comparator.nullsLast(SystemConstant.COLLATOR::compare))
.thenComparing(PointMonthEnergyIncrementValue::getFloorName, Comparator.nullsLast(SystemConstant.COLLATOR::compare))
.thenComparing(PointMonthEnergyIncrementValue::getPointName, Comparator.nullsLast(SystemConstant.COLLATOR::compare))));
}
四、两个List集合取交集、并集、差集、去重并集
public class Test {
public static void main(String[] args) {
List list1 = new ArrayList();
list1.add("1");
list1.add("2");
list1.add("3");
list1.add("5");
list1.add("6");
List list2 = new ArrayList();
list2.add("2");
list2.add("3");
list2.add("7");
list2.add("8");
// 交集 取相等的
List intersection = list1.stream().filter(item -> list2.contains(item)).collect(Collectors.toList());
System.out.println("---交集 intersection---");
intersection.parallelStream().forEach(System.out :: println);
// 差集 (list1 - list2)
List reduce1 = list1.stream().filter(item -> !list2.contains(item)).collect(Collectors.toList());
System.out.println("---差集 reduce1 (list1 - list2)---");
reduce1.parallelStream().forEach(System.out :: println);
//应用场景:批量添加权限,表中userId和roleId相同则认为数据相同不插入,需要从数据中过滤出需要插入的数据
// 差集 (list1 - list2) 取集合对象,
List<PointEntity> reduce = resultPointEntities.stream().filter(e -> {
for (PointEntity pointEntity : pointEntities) {
if (e.getId().equals(pointEntity.getId())) {
return false;//false排除不要
}
}
return true;
}).collect(Collectors.toList());
//第二种 先把集合二转换成 单个属性值,在调用 contains查找 集合中的值 ,有返回true,没有返回false
List<SysUser1> collect = user1List.stream().filter(sysUser1
-> !user2List.stream().map(SysUser2::getAge).collect(Collectors.toList()).contains(sysUser1.getAge()))
.collect(Collectors.toList());
//java中contains方法是判断是否存在包含关系,比如说a =[1,2,3,4], b=1那么a就包含b
//contains返回的是布尔类型true 和false,包含的话就返回true,不包含的话就返回false
// 差集 (list2 - list1)
List reduce2 = list2.stream().filter(item -> !list1.contains(item)).collect(Collectors.toList());
System.out.println("---差集 reduce2 (list2 - list1)---");
reduce2.parallelStream().forEach(System.out :: println);
// 并集
List listAll = list1.parallelStream().collect(Collectors.toList());
List listAll2 = list2.parallelStream().collect(Collectors.toList());
listAll.addAll(listAll2);
System.out.println("---并集 listAll---");
listAll.parallelStream().forEachOrdered(System.out :: println);
// 去重并集
List listAllDistinct = listAll.stream().distinct().collect(Collectors.toList());
System.out.println("---得到去重并集 listAllDistinct---");
listAllDistinct.parallelStream().forEachOrdered(System.out :: println);
System.out.println("---原来的List1---");
list1.parallelStream().forEachOrdered(System.out :: println);
System.out.println("---原来的List2---");
list2.parallelStream().forEachOrdered(System.out :: println);
}
}文章来源地址https://www.toymoban.com/news/detail-587873.html
到了这里,关于java8集合操作(排序、取交集、并集、差集、去重并集)分组的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!