1. 程式人生 > 實用技巧 >Map結合Function函式式介面的巧妙之處

Map結合Function函式式介面的巧妙之處

需求:在給定List集合中,需根據不同的演算法規則,計算並返回結果;

例如:[1, 2, 3, 4, 5] list 集合中都是 Integer 型別資料,根據提供的演算法規則,sum 求和,min 求最小值,max 求最大值等;

一、使用列舉類實現

(1)定義列舉類DataEnum,需實現指定的計算介面,根據不同的演算法規則【使用列舉類中預設的 name 屬性】,來選取不同的演算法計算方式;

(2)程式碼如下:

// 計算方式介面定義
public interface Icalculate {

    // 計算方式
    Integer calculate(List<Integer> datas);

}

// 定義列舉類,實現介面 public enum DataEnum implements Icalculate { SUM{ @Override public Integer calculate(List<Integer> datas) { return datas.stream().reduce(0, (element1, element2) -> element1 + element2); } }, MIN{ @Override public Integer calculate(List<Integer> datas) { Optional
<Integer> min = datas.stream().min(Comparator.comparingInt(o -> o)); return min.orElse(null); } }, MAX{ @Override public Integer calculate(List<Integer> datas) { Optional<Integer> max = datas.stream().max(Comparator.comparingInt(o -> o));
return max.orElse(null); } }; // 根據演算法規則,獲取指定的計算方式【挪用了列舉類繼承Enum中的name屬性】 public static DataEnum of(String name) { Optional<DataEnum> dataEnum = Arrays.stream(DataEnum.values()).filter(element -> element.name().equalsIgnoreCase(name)).findAny(); return dataEnum.orElse(null); } }
列舉類實現

(3)測試樣例及結果

public class DataEnumTest {

    public static void main(String[] args) {
        DataEnum dataEnum = DataEnum.of("max");
        if (!Objects.isNull(dataEnum)) {
            List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
            System.out.println("max = " + dataEnum.calculate(list));
        }
    }

}
結果:max = 5
測試樣例及結果

二、使用Map結構結合Function實現

(1)