jdk1.8新特性(四大函数式接口与Stream流式计算)
Posted 是Cc哈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jdk1.8新特性(四大函数式接口与Stream流式计算)相关的知识,希望对你有一定的参考价值。
一、四大函数式接口
概念:只有一个方法的接口
@FunctionalInterface
public interface Runnable
public abstract void run();
1.Function接口
源码:
Demo:
package com.chenchen;
import java.util.function.Function;
/**
* Function 函数型接口, 有一个输入参数,有一个输出
* 只要是 函数型接口 可以 用 lambda表达式简化
*/
public class Demo01
public static void main(String[] args)
//
// Function<String,String> function = new Function<String,String>()
// @Override
// public String apply(String str)
// return str;
//
// ;
Function<String,String> function = (str)->return str;;
System.out.println(function.apply("asd"));
2.断定型接口:
有一个输入参数,返回值只能是 布尔值!
源码:
Demo:
package com.chenchen.function;
import java.util.function.Predicate;
/**
* 断定型接口:有一个输入参数,返回值只能是 布尔值!
*/
public class Demo02
public static void main(String[] args)
// 判断字符串是否为空
// Predicate<String> predicate = new Predicate<String>()
@Override
public boolean test(String str)
return str.isEmpty();
;
Predicate<String> predicate = (str) ->
return str.isEmpty();
;
System.out.println(predicate.test(""));
3.消费型接口:
源码:
Demo:
package com.chenchen.function;
import java.util.function.Consumer;
/**
* Consumer 消费型接口: 只有输入,没有返回值
*/
public class Demo03
public static void main(String[] args)
// Consumer<String> consumer = new Consumer<String>()
// @Override
// public void accept(String str)
// System.out.println(str);
//
// ;
Consumer<String> consumer = (str) ->
System.out.println(str);
;
consumer.accept("sdadasd");
4.供给型接口
源码:
Demo:
package com.chenchen.function;
import java.util.function.Supplier;
/**
* Supplier 供给型接口 没有参数,只有返回值
*/
public class Demo04
public static void main(String[] args)
// Supplier supplier = new Supplier<Integer>()
// @Override
// public Integer get()
// System.out.println("get()");
// return 1024;
//
// ;
Supplier supplier = () ->
return 1024;
;
System.out.println(supplier.get());
二、Stream流式计算
大数据的本质为存储+计算,集合与数据库的本质都是存储的,而计算的工作可以交给流来操作。
举例:
package com.chenchen.stream;
import java.util.Arrays;
import java.util.List;
/**
* 题目要求:一分钟内完成此题,只能用一行代码实现!
* 现在有5个用户!筛选:
* 1、ID 必须是偶数
* 2、年龄必须大于23岁
* 3、用户名转为大写字母
* 4、用户名字母倒着排序
* 5、只输出一个用户!
*/
public class Test
public static void main(String[] args)
User u1 = new User(1, "a", 21);
User u2 = new User(2, "b", 22);
User u3 = new User(3, "c", 23);
User u4 = new User(4, "d", 24);
User u5 = new User(6, "e", 25);
// 集合就是存储
List<User> list = Arrays.asList(u1, u2, u3, u4, u5);
// 计算交给Stream流
// lambda表达式、链式编程、函数式接口、Stream流式计算
list.stream()
.filter(u ->
return u.getId() % 2 == 0;
)
.filter(u ->
return u.getAge() > 23;
)
.map(u ->
return u.getName().toUpperCase();
)
.sorted((uu1, uu2) ->
return uu2.compareTo(uu1);
)
.limit(1)
.forEach(System.out::println);
以上是关于jdk1.8新特性(四大函数式接口与Stream流式计算)的主要内容,如果未能解决你的问题,请参考以下文章
jdk1.8新特性——Stream(流)的终止操作(查找与匹配的示例演示)