Map結合Function函式式介面的巧妙之處
阿新 • • 發佈:2020-08-14
需求:在給定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)