lambda 表达式
1、lambda表达式的作用
个人理解卵用没有,但是用的还很多,不会还不行。
2、什么情况下可以用
函数式接口的情况下用,什么是函数式接口呢,接口里有且只有一个接口的时候才能用表达式(@FunctionalInterface 这个注解修饰
)(除了接口中的 默认方法和静态方法)
3、lambda表达式语法说明
/** * * ->是叫箭头操作符 * -> 左边是型参列表,指的是接口方法里面的参数 * -> 右边是lambda体,实现接口重写方法时,方法里面的方法体,不用关心方法叫什么名字 * * 接口里面只能有一个方法,两个方法就玩不转了 */
4、使用举例
4.1没有参数没有返沪值
@Test public void test1(){ /** * 无参无返回值 */ Runnable runnable = new Runnable() { @Override public void run() { System.out.println("我爱北京天安门"); } }; runnable.run();
//改成lambda 表达式的写法 System.out.println("*******************"); // 表达式的本质是:作为接口的一个实例 Runnable runnable1 = () -> System.out.println("我爱北京故宫"); runnable1.run(); }
4.2 有一个参数没有返回值
public interface Consumer<T> { public void accept(T t); } /** * 一个参数 没有返回值 */ @Test public void test2(){ System.out.println("===================="); Consumer<String> c =(s) -> { System.out.println(s); }; c.accept("ceshi lambda"); }
4.3表达式有两个或两个以上的参数,多条执行语句,并且有返回值时
@Test public void test5(){ Comparator<Integer> comparator = new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1.compareTo(o2); } }; System.out.println("*****************"); Comparator<Integer> com = (o3,o4)->{ System.out.println(o3); System.out.println(o4); return o3.compareTo(o4); }; System.out.println(com.compare(12,34)); }
4.4 lambda表达式的参数部分指定参数类型
SingleOutputStreamOperator<Tuple2<String, Integer>> wordAndOneDS = linDs .flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() { @Override public void flatMap(String value, Collector<Tuple2<String, Integer>> out) throws Exception { // 按照 空格 切分 String[] words = value.split(" "); for (String word : words) { // 转换成 二元组 (word,1) Tuple2<String, Integer> wordsAndOne = Tuple2.of(word, 1); // 通过 采集器 向下游发送数据 out.collect(wordsAndOne); } } }); // lambda还可以这样的写啊 socketDS.flatMap((String value, Collector<Tuple2<String,Integer>> out)->{ String[] words = value.split(" "); for (String word : words) { // 转换成 二元组 (word,1) Tuple2<String, Integer> wordsAndOne = Tuple2.of(word, 1); // 通过 采集器 向下游发送数据 out.collect(wordsAndOne); } });