2020你还不会Java8新特性? (4)

函数式接口的真谛: 传递的是行为,而不是数据。

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 接口

public class SinaryOpertorTest { public static void main(String[] args) { SinaryOpertorTest sinaryOpertorTest = new SinaryOpertorTest(); System.out.println(sinaryOpertorTest.compute(1,2,(a,b) -> a+b)); System.out.println("-- -- - - - -- -"); System.out.println(sinaryOpertorTest.getMax("hello123","world",(a,b) -> a.length() - b.length())); } private int compute(int a, int b, BinaryOperator<Integer> binaryOperator) { return binaryOperator.apply(a, b); } private String getMax(String a, String b, Comparator<String> comparator) { return BinaryOperator.maxBy(comparator).apply(a, b); } }

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类:

类名::静态方法名

引用名(对象名)::实例方法名

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwgpf.html