Java 8 stream reduces arbitrary class types

Well, it's not a homework question, it's a question of "I got the Java 8 program and hope to finally pass the certification exam"

I tried to find the reduce () method in reducing the list of any class of a single member of my code (not the string or integer of most of the sample code I saw)

package playground;

import java.util.Arrays;
import java.util.List;

public class TestClass {

public static class MyClass {

    private int accumulator = 0;

    public MyClass() {

    }

    public MyClass(int initValue) {
        this.accumulator = initValue;
    }

    public int getAccumulator() {
        return accumulator;
    }

    public void setAccumulator(int accumulator) {
        this.accumulator = accumulator;
    }


}

public static void main(String... args) {

    MyClass mc1 = new MyClass(6);
    MyClass mc2 = new MyClass(8);
    MyClass mc3 = new MyClass(3);

    List<MyClass> myList = Arrays.asList(mc1,mc2,mc3);
    MyClass finalClass = myList.stream().reduce(new MyClass(0),// need the correct lambda function here
    );


}

}

Solution

What works:

MyClass finalClass = myList.stream()
    .reduce((a,b) -> new MyClass(a.accumulator + b.accumulator))
    .orElse(new MyClass(0));

This requires two inputs, which must be enclosed in parentheses and reduced to one output Note that this returns an optional

A simple way to deal with this problem is to use orelse, which is equivalent to:

if(myList.size() == 0){
    return new MyClass(0);
}
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>