如何从两种不同类型的列表创建对象列表

How create a list of an object from two different types of lists

我有两个对象,它们有两个共同的字段,代码字段和位置字段。我使用两个不同的列表,一个是 Object1,另一个是 Object2。 Object2 之前已过滤,与 Object1 相比缺少元素。我需要在 Object1 上 stream() 比较仍在 Object2 列表中的对象的代码值和位置值,以将它们保留在 Object1 列表中。

示例:

//List<Object1> object1 :
object1.get(0) // code="VALUE1"; position=1; other fields...
object1.get(1) // code="VALUE2"; position=2; other fields...
object1.get(2) // code="VALUE3"; position=3; other fields...

//List<Object2> object2 :
object2.get(0) // code="VALUE2"; position=2; other fields...
object2.get(1) // code="VALUE3"; position=3; other fields...

object1 = object1.stream()...().collect(Collectors.toList()); // After object1 should have :
object1.get(0) // code="VALUE2"; position=2; other fields...
object1.get(1) // code="VALUE3"; position=3; other fields...

如何使用 Java 8 流 API 执行此操作?

如果我正确理解了您的描述,则应该执行以下操作:

public static void main (String[] args) {
    List<Object1> object1 = new ArrayList<>();
    object1.add(new Object1("1", 1));
    object1.add(new Object1("2", 2));
    object1.add(new Object1("3", 3));
    object1.add(new Object1("4", 4));
    object1.add(new Object1("5", 5));

    List<Object2> object2 = new ArrayList<>();
    object2.add(new Object2("1", 1));
    object2.add(new Object2("2", 2));
    object2.add(new Object2("5", 5));

    List<Object1> filteredObject1 = object1.stream()
            .filter(o1 -> object2.stream().anyMatch(o2 -> o2.getCode().equals(o1.getCode()) && o2.getPosition() == o1.getPosition()))
                    .collect(Collectors.toList());

    System.out.println(filteredObject1);
}

它在 object1 中保留 Object1 个实例,它们与 object2 中的 Object2 个实例具有相同的 codeposition