Given:
public class Product {
int id;
int price;
public Product(int id, int price) {
this.id = id;
this.price = price;
}
public String toString() {
return id + " : " + price;
}
}
and the code fragment:
List<Product> products = new ArrayList(Arrays.asList(new Product(1, 10),
new Product(2, 30),
new Product(2, 30)));
Product p = products.stream().reduce(new Product(4, 0), (p1, p2) -> {
p1.price += p2.price;
return new Product(p1.id, p1.price);
});
products.add(p);
products.stream().parallel()
.reduce((p1, p2) -> p1.price > p2.price ? p1 : p2)
.ifPresent(System.out::println);
What is the result?
A.
2 : 30
B.
4 : 0
C.
4 : 70
D.
4 : 70
2 : 30
3 : 20
1 : 10
2 : 30
3 : 20
1 : 10
E. The program prints nothing.
題解
程式第33行,reduce方法會將串流中的所有Product物件元素的price欄位進行加總,10+30+30=70,最後得到的Product物件為「4 : 70」。
程式第39行,reduce方法會保留最後price欄位數值最大的Product物件,因此會把「4 : 70」留下。
程式第40行,輸出「4 : 70」。