在 Java 中,如果你有多个对象的 List,并且想要将它们的数据合并,有多种方法可以实现。具体取决于你希望如何合并对象数据,常见的方式包括直接将 List 进行连接(合并)或合并 List 中对象的属性。

1. 合并多个 List

如果你有多个 List,并且想将它们直接合并成一个新的 List,可以使用 addAll() 方法或 Java 8 的 Stream API 来实现。

方法 1:使用 addAll()

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> list1 = new ArrayList<>();
        list1.add("A");
        list1.add("B");

        List<String> list2 = new ArrayList<>();
        list2.add("C");
        list2.add("D");

        // 创建一个新的 List 用于存储合并结果
        List<String> combinedList = new ArrayList<>(list1);
        combinedList.addAll(list2);

        System.out.println(combinedList);  // 输出: [A, B, C, D]
    }
}
  • addAll() 方法将一个 List 的所有元素添加到另一个 List 中。

方法 2:使用 Java 8 的 Stream

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) {
        List<String> list1 = new ArrayList<>();
        list1.add("A");
        list1.add("B");

        List<String> list2 = new ArrayList<>();
        list2.add("C");
        list2.add("D");

        // 使用 Stream 合并多个 List
        List<String> combinedList = Stream.concat(list1.stream(), list2.stream())
                                          .collect(Collectors.toList());

        System.out.println(combinedList);  // 输出: [A, B, C, D]
    }
}
  • Stream.concat() 方法将两个 Stream 合并,并最终转换回 List

方法 3:使用 Collections.addAll()

如果你有一个空的目标 List 并想添加多个 List 的数据,可以使用 Collections.addAll()

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> list1 = new ArrayList<>();
        list1.add("A");
        list1.add("B");

        List<String> list2 = new ArrayList<>();
        list2.add("C");
        list2.add("D");

        List<String> combinedList = new ArrayList<>();
        Collections.addAll(combinedList, list1.toArray(new String[0]));
        Collections.addAll(combinedList, list2.toArray(new String[0]));

        System.out.println(combinedList);  // 输出: [A, B, C, D]
    }
}

2. 合并多个 List 中对象的属性

如果 List 中存储的是自定义对象,并且你希望合并它们的属性,可以使用 for 循环、StreamCollectors 来进行处理。

示例:合并对象的属性

假设你有一个 Person 类,并且每个 List 中存储的是 Person 对象,目标是合并这些 Person 对象的某些属性。

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

class Person {
    String name;
    int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return name + ": " + age;
    }
}

public class Main {
    public static void main(String[] args) {
        List<Person> list1 = new ArrayList<>();
        list1.add(new Person("Alice", 25));
        list1.add(new Person("Bob", 30));

        List<Person> list2 = new ArrayList<>();
        list2.add(new Person("Charlie", 35));
        list2.add(new Person("David", 40));

        // 合并两个 List 并进行处理
        List<Person> combinedList = new ArrayList<>(list1);
        combinedList.addAll(list2);

        // 例如:将年龄大于30的人员过滤出来
        List<Person> filteredList = combinedList.stream()
                                                .filter(p -> p.age > 30)
                                                .collect(Collectors.toList());

        filteredList.forEach(System.out::println);  // 输出: Charlie: 35, David: 40
    }
}

使用 Stream 合并属性

你可以直接通过流的方式提取并合并特定属性,例如合并 Person 对象的 name 属性:

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

class Person {
    String name;
    int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

public class Main {
    public static void main(String[] args) {
        List<Person> list1 = new ArrayList<>();
        list1.add(new Person("Alice", 25));
        list1.add(new Person("Bob", 30));

        List<Person> list2 = new ArrayList<>();
        list2.add(new Person("Charlie", 35));
        list2.add(new Person("David", 40));

        // 合并两组人员的名字
        List<String> names = Stream.concat(list1.stream(), list2.stream())
                                   .map(person -> person.name)
                                   .collect(Collectors.toList());

        System.out.println(names);  // 输出: [Alice, Bob, Charlie, David]
    }
}

总结

  • 如果只是想合并多个 List,可以使用 addAll()Stream.concat()
  • 如果要合并 List 中的对象,并进行数据处理,可以使用 Stream 或遍历来操作。