Java 8 lambda 合併兩個List
,並排除具有相同key的物件。
Order
為範例List
中裝載的元素,id
為key。
Order
public class Order {
private long id; // key
private long amount;
Order(long id, long amount) {
this.id = id;
this.amount = amount;
}
@Override
public String toString() {
return String.format("id=%s, amount=%s", id, amount);
}
// getters and setters...
}
使用Stream.concat()
合併兩個List
的Stream
。然後用filter()
搭配TreeSet
排除key重複的物件,
例如下面合併list1
與list2
,並以Order.id
做為比較是否重覆,如果相同則以list1
為主。
Main
public class Main {
public static void main(String[] args) {
List<Order> list1 = Arrays.asList(
new Order(1, 10),
new Order(2, 100));
List<Order> list2 = Arrays.asList(
new Order(1, 9),
new Order(2, 99),
new Order(3, 1000),
new Order(4, 10000));
// TreeSet<Order> treeSet = new TreeSet<>(Comparator.comparing(Order::getId));
// List<Order> combinedList = Stream.concat(
// list1.stream(), list2.stream())
// .filter(treeSet::add)
// .collect(Collectors.toList());
List<Order> combinedList = Stream.concat(
list1.stream(), list2.stream())
.filter(new TreeSet<>(Comparator.comparing(Order::getId))::add)
.collect(Collectors.toList());
combinedList.forEach(System.out::println);
}
}
印出結果。
id=1, amount=10
id=2, amount=100
id=3, amount=1000
id=4, amount=10000
沒有留言:
張貼留言