JavaSE 计算2个List集合中的交集、差集、并集、去重并集

VideoOrder.java#

重写里面的equals和hashCode方法

复制代码
class VideoOrder {
    private int price;
    private String title;

    public VideoOrder(String title, int price) {
        this.title = title;
        this.price = price;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o)
            return true;
        if (o == null || getClass() != o.getClass())
            return false;
        VideoOrder that = (VideoOrder) o;
        return price == that.price && Objects.equals(title, that.title);
    }

    @Override
    public int hashCode() {
        return Objects.hash(price, title);
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    @Override
    public String toString() {
        return "VideoOrder{" + "price=" + price + ", title='" + title + '\'' + '}';
    }
}
复制代码

main方法

复制代码
    public static void main(String[] args) {
        List<VideoOrder> videoOrders1 = new ArrayList<>();
        videoOrders1.add(new VideoOrder("a课程", 22));
        videoOrders1.add(new VideoOrder("w课程", 200));
        videoOrders1.add(new VideoOrder("c课程", 100));
        videoOrders1.add(new VideoOrder("d课程", 33));
        videoOrders1.add(new VideoOrder("f课程", 1));
        List<VideoOrder> videoOrders2 = new ArrayList<>();
        videoOrders2.add(new VideoOrder("a课程", 22));
        videoOrders2.add(new VideoOrder("b课程", 18));
        videoOrders2.add(new VideoOrder("d课程", 33));
        videoOrders2.add(new VideoOrder("f课程", 1));
        videoOrders2.add(new VideoOrder("z课程", 22));
        // 交集,方式一
        // videoOrders1.retainAll(videoOrders2);
        // System.out.println(videoOrders1);
        //方式二
        List<VideoOrder> intersectionList = new ArrayList<>();
        for (VideoOrder videoOrder : videoOrders1) {
            if (videoOrders2.contains(videoOrder)) {
                intersectionList.add(videoOrder);
            }
        }
        System.out.println("交集=" + intersectionList);
        // videoOrders1差集,方式一
        // videoOrders1.removeAll(videoOrders2);
        // System.out.println(videoOrders1);
        //方式二
        List<VideoOrder> diffList1 = new ArrayList<>();
        for (VideoOrder videoOrder : videoOrders1) {
            if (!videoOrders2.contains(videoOrder)) {
                diffList1.add(videoOrder);
            }
        }
        System.out.println("订单1差集=" + diffList1);
        // videoOrders2差集
        // videoOrders2.removeAll(videoOrders1);
        // System.out.println(videoOrders2);
        List<VideoOrder> diffList2 = new ArrayList<>();
        for (VideoOrder videoOrder : videoOrders2) {
            if (!videoOrders1.contains(videoOrder)) {
                diffList2.add(videoOrder);
            }
        }
        System.out.println("订单2差集=" + diffList2);
        // 并集
         videoOrders1.addAll(videoOrders2);
         System.out.println(videoOrders1);
        // 去重并集
        // Set<VideoOrder> set = new HashSet<>(videoOrders1);
        // System.out.println(set);
    }
复制代码

 

 

 

posted @   陈彦斌  阅读(330)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2019-07-31 ASP.Net MVC 路由及路由调试工具RouteDebug
2019-07-31 ASP.Net MVC过滤器
2019-07-31 Oracle 去重后排序
点击右上角即可分享
微信分享提示
主题色彩