Java8函数式编程
一、Java中重要的函数接口
- Predicate: 接受一个对象,作判断,返回一个布尔值
- Consumer: 接受一个对象,消费输入,输出一个值
- Function<T,R>: 接受一个对象,获得对象的名字
- Supplier: 工厂方法
- UnaryOperator: 接受一个对象,计算逻辑非(!)
- BinaryOperator: 接受两个数,求两个数的运算结果
二、常用的流操作【惰性求值(返回值是Stream),及早求值(返回值是另一个值或为空)】
- collect(toList()): 由Stream 里的值生成一个列表
List<String> collected = Stream.of("a", "b", "c")
.collect(Collectors.toList());
- map: 将Stream里一种类型的值转换成另外一种类型,即用一个新的值代替Stream中的值
List<String> collected = Stream.of("a", "b", "hello")
.map(string -> string.toUpperCase())
.collect(toList());
- flatMap: 可用Stream替换值,然后将多个Stream连接成一个Stream,生成一个新的Stream对象
List<Integer> together = Stream.of(asList(1, 2), asList(3, 4))
.flatMap(numbers -> numbers.stream())
.collect(toList());
- filter: 遍历数据并检查其中的元素,保留Stream中符合条件的的元素,而过滤掉其他不符合条件的
List<String> beginningWithNumbers = Stream.of("a", "1abc", "abc1")
.filter(value -> isDigit(value.charAt(0)))
.collect(toList());
- max和min: 求最大值和最小值,返回Optional对象
List<Track> tracks = asList(new Track("Bakai", 524),new Track("Violets for Your Furs", 378), new Track("Time Was", 451));
Track shortestTrack = tracks.stream()
.min(Comparator.comparing(track -> track.getLength()))
.get();
- get: 可以取出Optional对象中的值
- reduce: 实现从一组值中生成一个值
求和:
int count = Stream.of(1, 2, 3)
.reduce(0, (acc, element) -> acc + element);