Reduce

1499 ワード

Reduce()演算


非定義演算のプログラマが直接実施する演算を適用する
フォーマットはT reduce(T identify, BinaryOperator<T> accumulator)最終演算は、ストリーム内の要素を消費し、演算を実行します.Reduce()法における第2の要素伝達ランダ式によれば、様々な機能を実行することができる.
ramda式が直接実現された場合、または式長が実現された場合、BinaryOperatorを実現したクラスが使用される.

配列の中のすべての要素の和のreduce()演算を求めます

Ex)
Arrays.stream(arr).reduce(0, (a,b) -> a+b));

配列に複数の文字列がある場合に最も長い文字列を検索

Ex)
import java.util.Arrays;
import java.util.function.BinaryOperator;

class CompareString implements BinaryOperator<String>{

    @Override
    public String apply(String s1, String s2) {
        {if(s1.getBytes().length>= s2.getBytes().length) return s1;
        else return s2;}
    }
}

public class ReduceTest {
    public static void main(String[] args) {

        String greetings[] = {"hello","hi","Good morning","안녕하세요"};

        System.out.println(Arrays.stream(greetings).reduce("",(s1, s2) ->
        {if(s1.getBytes().length>= s2.getBytes().length) return s1;
            else return s2;}
        ));

        String str = Arrays.stream(greetings).reduce(new CompareString()).get();
        System.out.println(str);
    }
}
ハングルの方がバイトが大きいのでbyteで計算すると一番長い「こんにちは」が出力されます.