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)

原文地址:https://www.cnblogs.com/blogtech/p/13501765.html


原网址: 访问
创建于: 2021-03-11 18:35:44
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论