java--取出两个集合里相同的元素数量,并根据集合里的指定字段排序

需求:sceneList和realList是两个不同的集合,现在要取出两个集合中相同元素的数量。

方法一:

使用retainAll()方法去除不相同元素,之后的集合size()就是两集合的相同元素数量大小

这里需注意的是:使用retainAll()会删除A集合中不存在于集合B中的元素。

方法二:

循环判断集合A的元素是否存在于集合B。新建一个空集合C,将相同数据放入C里,集合C的size()就是A和B相同元素的数量。

实体:

@Data
public class SceneSortDto implements Serializable {


    @ApiModelProperty(value = "场景id:-")
    private Integer id;

    @ApiModelProperty(value = "场景名称")
    private String name;

    @ApiModelProperty(value = "相同元素数量")
    private Integer sort;

}

实现:

public List<SceneSortDto> sceneSort() {
        //获取全部场景
        List<SceneSortDto> scenes = sceneMapper.queryAllSceneInfo();
        //遍历每一个场景,获取到每一个场景的设备状态集合和实际的设备状态集合
        for (SceneSortDto scene : scenes) {
            List<SceneEquDto> sceneList = equipmentMapper.judgeScene(scene.getId());
            List<SceneEquDto> realList = equipmentMapper.realSceneSb(scene.getId());
            //方法1,使用retainAll会删除A(realList)集合中不存在于集合B(sceneList)中的元素
            realList.retainAll(sceneList);
            scene.setSort(realList.size());//将剩余的相同元素集合大小放进sort字段
            //方法2
            /*List<SceneEquDto> listNew = new ArrayList<>();
            realList.forEach(e -> {
                if (sceneList.contains(e)) {
                    listNew.add(e);
                }
            });
            scene.setSort(listNew.size());*/
        }
        scenes.sort(Comparator.comparing(SceneSortDto::getSort).reversed());//按照sort从大到小将集合排序
        return scenes;
    }

获取到相同元素数量后,可使用Comparator方法根据相似度将集合从大到小排序。

另外笔记:

如果只是判断两个集合是否有相同数据,可直接用Collections.disjoint(Collection<?> c1, Collection<?> c2),

若Collections.disjoint(list1, list2)返回true就是有相同元素,返回false没有相同元素

if (Collections.disjoint(list1, list2)) {
   System.out.println("有相同的元素");
}else{
    System.out.println("没有相同的元素");
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值