如何从两种不同类型的列表创建对象列表
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
个实例具有相同的 code
和 position
。
我有两个对象,它们有两个共同的字段,代码字段和位置字段。我使用两个不同的列表,一个是 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
个实例具有相同的 code
和 position
。