Lambada表达式
概念:函数式接口,使用紧凑的语法结构,表达式有,号分隔的参数和->组成的表达式
排序和遍历
List<User> userList = new ArrayList<User>(); userList.add(new User(1, "jason", 30, "guanzhou")); userList.add(new User(2, "kevin", 32, "jiangxi")); userList.add(new User(1, "james", 31, "sichuan")); System.out.println("开始:"); userList.forEach(user -> System.out.println(user.toString())); userList.sort((user1, user2) -> { int result = user1.getAge() - user2.getAge(); return result; }); System.out.println("结束:"); userList.forEach(user -> System.out.println(user.toString())); userList.remove(0); System.out.println("结束2:"); userList.forEach(user -> System.out.println(user.toString()));
函数式接口定义:
1. 必须是函数
2. 有且仅有一个非默认或静态方法
3.默认方法和静态方法不会破坏函数式接口的定义
如下是合法的
@FunctionalInterface public interface Animal { void eat(); static void eat2() { } default void defaultMethod() { } }
公共的函数式接口--函数式接口中的方法(作用:标识传几个参数,返回值是啥)
函数式接口 函数描述符 原始类型特化 Predicate< T > T->boolean IntPredicate,LongPredicate, DoublePredicate Consumer< T > T->void IntConsumer,LongConsumer, DoubleConsumer Function< T,R > T->R IntFunction< R >,IntToDoubleFunction,IntToLongFunction,LongFunction< R >,LongToDoubleFunction,LongToIntFunction,DoubleFunction< R >,ToIntFunction< T >,ToDoubleFunction< T >,ToLongFunction< T > Supplier< T > ()->T BooleanSupplier,IntSupplier, LongSupplier,DoubleSupplier UnaryOperator< T > T->T IntUnaryOperator,LongUnaryOperator,DoubleUnaryOperator BinaryOperator< T > (T,T)->T IntBinaryOperator,LongBinaryOperator,DoubleBinaryOperator BiPredicate< L,R > (L,R)->boolean BiConsumer< T,U > (T,U)->void ObjIntConsumer< T >,ObjLongConsumer< T >,ObjDoubleConsumer< T > BiFunction< T,U,R > (T,U)->R ToIntBiFunction< T,U >,ToLongBiFunction< T,U >,ToDoubleBiFunction< T,U >