java 组合对象,在Java中合并两个对象

本文讨论如何在Java中合并两个具有相同类型的对象,特别是当对象包含基本类型和集合属性时。提出了一种通过`merge`方法实现对象属性合并的方案,该方法可以智能地处理null值和默认值。通过调用`merge`方法,对象的属性被有效地整合到一个新的或已存在的对象中。

I have two objects of same type.

Class A{

String a;

List b;

int c;

}

A obj1= new A();

A obj2 = new A();

obj1 => {a = "hello";b=null;c=10}

obj2 => {a=null;b= new ArrayList();c=default value}

Can you please let me know what is the best way to combine this objects into single object?

obj3 = {a = "hello";b=(same arraylist from obj2);c=10}

解决方案

Maybe something like

class A {

String a;

List<..> b;

int c;

public void merge(A other) {

this.a = other.a == null ? this.a : other.a;

this.b.addAll(other.b);

this.c = other.c == 0 ? this.c : other.c;

}

}

A a1 = new A();

A a2 = new A();

a1.a = "a prop";

a2.c = 34;

a1.merge(a2);

A.merge might return a new A object instead of modifing current.

Java 1.8 中,可以使用 Stream API 来合并两个集合对象。以下是几种常见的合并集合对象的方法: ### 合并两个 `List` 集合 可以使用 `Stream.concat` 方法将两个 `List` 合并成一个新的 `List`,示例代码如下: ```java import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; class User { private String name; public User(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } } public class MergeListsExample { public static void main(String[] args) { List<User> list1 = new ArrayList<>(); list1.add(new User("Alice")); list1.add(new User("Bob")); List<User> list2 = new ArrayList<>(); list2.add(new User("Charlie")); list2.add(new User("David")); List<User> mergedList = Stream.concat(list1.stream(), list2.stream()) .collect(Collectors.toList()); for (User user : mergedList) { System.out.println(user.getName()); } } } ``` 在上述代码中,使用 `Stream.concat` 方法将 `list1` 和 `list2` 的流合并为一个流,然后使用 `collect(Collectors.toList())` 将合并后的流转换为一个新的 `List`。 ### 合并集合某个属性 若要合并集合中某个对象的属性,可以使用 `Collectors.toMap` 方法,示例如下: ```java import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; class BillsNums { private int id; private int nums; private double sums; public BillsNums(int id, int nums, double sums) { this.id = id; this.nums = nums; this.sums = sums; } public int getId() { return id; } public void setId(int id) { this.id = id; } public int getNums() { return nums; } public void setNums(int nums) { this.nums = nums; } public double getSums() { return sums; } public void setSums(double sums) { this.sums = sums; } } public class MergeAttributesExample { public static void main(String[] args) { List<BillsNums> list = new ArrayList<>(); list.add(new BillsNums(1, 10, 100.0)); list.add(new BillsNums(1, 20, 200.0)); List<BillsNums> newvos = list.stream() .collect(Collectors.toMap(BillsNums::getId, a -> a, (o1, o2) -> { o1.setNums(o1.getNums() + o2.getNums()); o1.setSums(o1.getSums() + o2.getSums()); return o1; })) .values() .stream() .collect(Collectors.toList()); for (BillsNums billsNums : newvos) { System.out.println("ID: " + billsNums.getId() + ", Nums: " + billsNums.getNums() + ", Sums: " + billsNums.getSums()); } } } ``` 此代码通过 `Collectors.toMap` 方法根据 `id` 合并 `BillsNums` 对象的 `nums` 和 `sums` 属性,最终将合并后的对象收集到一个新的 `List` 中 [^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值