java8集合操作(排序、取交集、并集、差集、去重并集)分组

这篇具有很好参考价值的文章主要介绍了java8集合操作(排序、取交集、并集、差集、去重并集)分组。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、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))));

}

}

java8 取交集,java,数据结构,开发语言,Powered by 金山文档

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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包