首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

Java怎么把多个对象的list的数据合并

编程知识
2024年09月12日 19:16

1.示例一:创建几个包含Person对象的List,并将它们合并成一个新的List

在Java中,将多个对象的List合并通常涉及到遍历这些List并将它们的元素添加到一个新的List中。这里,我将给出一个详细的代码示例,该示例将展示如何将多个包含相同类型对象的List合并成一个List。

假设我们有一个简单的Person类,它有两个属性:nameage。我们将创建几个包含Person对象的List,并将它们合并成一个新的List。

首先,定义Person类:

public class Person {  
    private String name;  
    private int age;  
  
    // 构造方法  
    public Person(String name, int age) {  
        this.name = name;  
        this.age = age;  
    }  
  
    // Getter和Setter  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    // toString方法,便于打印Person对象  
    @Override  
    public String toString() {  
        return "Person{" +  
                "name='" + name + '\'' +  
                ", age=" + age +  
                '}';  
    }  
}

接下来,编写合并List的代码:

import java.util.ArrayList;  
import java.util.List;  
  
public class ListMerger {  
    public static void main(String[] args) {  
        // 创建三个List,每个List包含几个Person对象  
        List<Person> list1 = new ArrayList<>();  
        list1.add(new Person("Alice", 30));  
        list1.add(new Person("Bob", 25));  
  
        List<Person> list2 = new ArrayList<>();  
        list2.add(new Person("Charlie", 35));  
        list2.add(new Person("David", 40));  
  
        List<Person> list3 = new ArrayList<>();  
        list3.add(new Person("Eve", 28));  
  
        // 合并这些List  
        List<Person> mergedList = mergeLists(list1, list2, list3);  
  
        // 打印合并后的List  
        System.out.println(mergedList);  
    }  
  
    // 合并多个List的方法  
    public static <T> List<T> mergeLists(List<T>... lists) {  
        List<T> mergedList = new ArrayList<>();  
        for (List<T> list : lists) {  
            if (list != null) {  
                mergedList.addAll(list);  
            }  
        }  
        return mergedList;  
    }  
}

在这个示例中,我们首先定义了Person类,并为其提供了基本的构造方法、Getter和Setter方法,以及一个toString方法以便于打印。

然后,在ListMerger类中,我们创建了三个包含Person对象的List,并使用mergeLists方法将它们合并。mergeLists方法接受一个可变数量的List参数(通过List<T>... lists实现),然后遍历这些List,并使用addAll方法将它们添加到mergedList中。注意,在添加之前,我们检查了List是否为null,尽管在这个特定的例子中我们并没有创建null的List。

最后,我们打印了合并后的List,展示了合并的效果。

这个示例提供了将多个对象的List合并成一个List的详细步骤,并且代码可以直接运行,具有实际的参考价值和意义。

2.示例二:使用Java 8的Stream API

如果我们使用的是Java 8或更高版本,可以利用Stream API来更简洁地合并List。

import java.util.ArrayList;  
import java.util.Arrays;  
import java.util.List;  
import java.util.stream.Collectors;  
import java.util.stream.Stream;  
  
public class ListMergerStream {  
    public static void main(String[] args) {  
        List<Person> list1 = Arrays.asList(new Person("Alice", 30), new Person("Bob", 25));  
        List<Person> list2 = Arrays.asList(new Person("Charlie", 35), new Person("David", 40));  
        List<Person> list3 = Arrays.asList(new Person("Eve", 28));  
  
        // 使用Stream API合并List  
        List<Person> mergedList = Stream.of(list1, list2, list3)  
                .flatMap(List::stream)  
                .collect(Collectors.toList());  
  
        // 打印合并后的List  
        mergedList.forEach(System.out::println);  
    }  
  
    // 假设Person类和其他部分与之前的示例相同  
}

在这个示例中,Stream.of(list1, list2, list3)创建了一个包含所有List的Stream,然后flatMap(List::stream)将这个Stream中的每个List转换成一个新的Stream,并将这些Stream合并成一个Stream,最后通过collect(Collectors.toList())收集到一个新的List中。

3.示例三:使用Apache Commons Collections

如果我们在我们的项目中使用了Apache Commons Collections库,我们可以利用CollectionUtils.union方法来合并List。但请注意,CollectionUtils.union返回的是一个新的集合,它包含了所有给定集合的元素的视图,但这些元素并不保证是唯一的(除非原始集合中的元素本身就是唯一的)。

然而,对于List的合并,我们可能需要一个确实包含所有元素的新List,而不是一个视图。因此,我们可能需要将结果转换为一个新的List。但Apache Commons Collections本身可能没有直接的方法来做到这一点,所以我们可能仍然需要一些额外的步骤。不过,对于简单的合并操作,我们通常会使用Java标准库中的方法或Stream API。

但如果我们确实想使用Apache Commons Collections,并且想要一个包含所有元素的新List,我们可以这样做:

import org.apache.commons.collections4.CollectionUtils;  
  
import java.util.ArrayList;  
import java.util.Arrays;  
import java.util.Collection;  
import java.util.List;  
  
public class ListMergerApache {  
    public static void main(String[] args) {  
        // 假设list1, list2, list3已经定义并初始化  
  
        // 使用Apache Commons Collections的CollectionUtils来合并(但注意这不是直接支持List的合并)  
        // 一个简单的方法是使用ArrayList的构造器来接收一个Collection  
        List<Person> mergedList = new ArrayList<>(CollectionUtils.union(list1, list2, list3));  
  
        // 注意:如果list中有重复元素,并且我们想要去重,我们可能需要额外的步骤  
  
        // 打印合并后的List  
        mergedList.forEach(System.out::println);  
    }  
  
    // 假设Person类和其他部分与之前的示例相同  
  
    // 注意:CollectionUtils.union在Apache Commons Collections 4中可用,并且它接受可变数量的Collection参数  
}

但请注意,上面的代码示例中的CollectionUtils.union实际上并不直接支持可变数量的List作为参数,而是支持可变数量的Collection。因此,上面的代码示例在技术上可能不是完全准确的,因为CollectionUtils.union的常用重载方法只接受两个Collection参数。如果我们需要合并多于两个的List,我们可能需要连续调用union或使用其他方法(如Java标准库中的方法或Stream API)。

在实际应用中,由于Java标准库已经提供了强大且灵活的工具(如Stream API),因此通常不需要额外依赖Apache Commons Collections来执行基本的集合操作。

From:https://www.cnblogs.com/TS86/p/18410979
本文地址: http://shuzixingkong.net/article/1957
0评论
提交 加载更多评论
其他文章 JAVA基础之5-函数式接口的实现
之所以单独把这个列出来,是因为本人被一个源码给震撼了。 所以,本人目的是看看这个震撼实现,并模仿,最后把常规的实现也贴上,让读者可以看到相对完整的实现 注:本文代码基于JDK17 一、让人震撼的代码 Collectors.toList() public static &lt;T&gt; Collec
JAVA基础之5-函数式接口的实现
41岁的大龄程序员,苟着苟着,要为以后做打算了
最近看到 薰衣草写的《写在临近40岁的年龄》 多少有点感慨,直到看到初九写的《40岁大龄失业程序猿,未来该何去何从》 ,有点绷不住了,如果说薰衣草写的有点抒情,离心里的距离还有点远,而初九的情况简直像照进现实的镜子,映射出未来可能遇到的困境。 许多人在想:“活人难道真会被尿憋死?”觉得桥到床头自然直
简单聊聊 CORS 攻击与防御
我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品。我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值。 本文作者:霁明 什么是CORS CORS(跨域资源共享)是一种基于HTTP头的机制,可以放宽浏览器的同源策略,实现不同域名网站之间的通信。 前置知识 同源定义:协议、域
简单聊聊 CORS 攻击与防御 简单聊聊 CORS 攻击与防御 简单聊聊 CORS 攻击与防御
【解题报告】P8478 「GLR-R3」清明
P8478 「GLR-R3」清明 参考了出题人题解和 xcyyyyyy 大神的题解,强推前两篇。 拿到题完全没思路怎么办??? 人类智慧的巅峰,思维量的登峰造极。 换句话说就是非人题目,不过不得不说 GLR 的题是真的好,难度也是真的高。 首先我们需要看懂题面,这是第一个难点。 题面大意如下: 对于
【解题报告】P8478 「GLR-R3」清明
搭建ipv6并发代理池
声明 本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 学习目标 ounter(lineipv6代理池学习 前置环境配置 要求linux系统。我是pve下的ubuntugolang的
搭建ipv6并发代理池 搭建ipv6并发代理池 搭建ipv6并发代理池
LinkedHashMap原理详解—从LRU缓存机制说起
写在前面 从一道Leetcode题目说起 首先,来看一下Leetcode里面的一道经典题目:146.LRU缓存机制,题目描述如下: 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容
LinkedHashMap原理详解—从LRU缓存机制说起 LinkedHashMap原理详解—从LRU缓存机制说起 LinkedHashMap原理详解—从LRU缓存机制说起
Qml 实现仿前端的 Notification (悬浮出现页面上的通知消息)
在前端中一般称它为 Notification 或 Message,但本质是一种东西,即:悬浮弹出式的消息提醒框。 这种组件一般具有以下特点: 1、全局/局部显示:它不依赖于具体的页面元素,可以在整个页面的任意位置显示。 2、自动消失:默认情况下,消息会在一定时间后自动消失,也可以设置为不自动消失。
Qml 实现仿前端的 Notification (悬浮出现页面上的通知消息) Qml 实现仿前端的 Notification (悬浮出现页面上的通知消息) Qml 实现仿前端的 Notification (悬浮出现页面上的通知消息)
Vert.x HttpClient调用后端服务时使用Idle Timeout和KeepAlive Timeout的行为分析
其实网上有大量讨论HTTP长连接的文章,而且Idle Timeout和KeepAlive Timeout都是HTTP协议上的事情,跟Vert.x本身没有太大关系,只不过最近在项目上遇到了一些问题,用到了Vert.x的HttpClient,就干脆总结一下,留给自己今后做参考。 在使用Vert.x的Ht
Vert.x HttpClient调用后端服务时使用Idle Timeout和KeepAlive Timeout的行为分析 Vert.x HttpClient调用后端服务时使用Idle Timeout和KeepAlive Timeout的行为分析 Vert.x HttpClient调用后端服务时使用Idle Timeout和KeepAlive Timeout的行为分析