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

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」。