函数式接口的真谛: 传递的是行为,而不是数据。
public static void main(String[] args) { //给定一个输入参数,判断是否满足条件,满足的话返回true Predicate<String> predicate = p -> p.length() > 5; System.out.println(predicate.test("nnihaoda")); }到现在为止,只是讲解了Java.lang.function包下的几个最重要的,经常使用的方法。
2020年01月01日19:03:33 新的一年开始,记录一下每次学习的时间。
Predicate 谓语。 类中包含的方法:
boolean test(T t);
default Predicate<T> or(Predicate<? super T> other)
default Predicate<T> negate()
default Predicate<T> and(Predicate<? super T> other)
static <T> Predicate<T> isEqual(Object targetRef)
函数式编程,注重传递行为,而不是传递值。
public class PredicateTest2 { /** * 测试Predicate中的test方法 */ public static void main(String[] args) { List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9); PredicateTest2 predicateTest2 = new PredicateTest2(); //获取大于5的数字 predicateTest2.getAllFunction(list,item -> item > 5); System.out.println("--------"); //获取所有的偶数 predicateTest2.getAllFunction(list,item -> item % 2 ==0); System.out.println("--------"); //获取所有的数字 predicateTest2.getAllFunction(list,item -> true); //获取大于5并且是偶数的 System.out.println("--------"); predicateTest2.testAnd(list,item -> item > 5,item -> item % 2 == 0); } public void getAllFunction(List<Integer> list, Predicate<Integer> predicate){ for (Integer integer : list) { if (predicate.test(integer)) { System.out.println(integer); } } } // test or and public void testAnd(List<Integer> list,Predicate<Integer> integerPredicate,Predicate<Integer> integerPredicate1){ for (Integer integer : list) { if (integerPredicate.and(integerPredicate1).test(integer)) { System.out.println(integer); } } } }lambda表达式到底给我们带来了什么?原来通过面向对象的时候一个方法只能执行一种功能。现在传递的是行为,一个方法可以多次调用。
逻辑与或非三种的理解.
Supplier类 供应厂商;供应者 (不接收参数,返回结果)
用于什么场合? 工厂
2020年1月3日08:06:28
BinaryOperator 接口
Optional final :Optional 不要试图用来当做参数, 一般只用来接收返回值,来规避值的空指针异常的问题。
empty()
of()
ofNullable()
isPresent()
get()
...
public class OptionalTest { public static void main(String[] args) { Optional<String> optional = Optional.of("hello"); //不确定是否为 空是 调用和这个方法 // Optional<String> optional2 = Optional.ofNullable("hello"); // Optional<String> optional1 = Optional.empty(); //过时 // if (optional.isPresent()) { // System.out.println(optional.get()); // } optional.ifPresent(item -> System.out.println(item)); System.out.println(optional.orElse("nihao")); System.out.println(optional.orElseGet(() -> "nihao")); } public class OptionalTest2 { public static void main(String[] args) { Employee employee = new Employee(); employee.setName("dawa"); Employee employee1 = new Employee(); employee1.setName("erwa"); List<Employee> list = Arrays.asList(employee, employee1); Company company = new Company("gongsi", list); Optional<Company> optionalCompany = Optional.ofNullable(company); System.out.println(optionalCompany.map(company1 -> company1.getList()).orElse(Collections.emptyList())); } } Java8(2)方法引用详解及Stream流介绍2020你还不会Java8新特性?方法引用详解及Stream 流介绍和操作方式详解(三)
方法引用详解方法引用: method reference
方法引用实际上是Lambda表达式的一种语法糖
我们可以将方法引用看作是一个「函数指针」,function pointer
方法引用共分为4类:类名::静态方法名
引用名(对象名)::实例方法名