美文网首页javajava lambda
为什么需要lambda

为什么需要lambda

作者: spraysss | 来源:发表于2019-01-29 17:00 被阅读0次

OOP vs lambda

如果说面向对象编程时对数据的抽象,那么函数式编程就是对行为的抽象。lambda 更利于实现并行编程并且更加的简洁。

lambda 的写法

->将lambda分为两个部分:左边是参数,右边是语句。
②参数不需要写明参数类型,javac会根据上下文进行类型推断。
③当没有参数时,左边为()就行
④当只有一行语句时{}可以省略

1.  Runnable noArguments = () -> System.out.println("Hello World");
2.ActionListener oneArgument = event -> System.out.println("button clicked");
3.Runnable multiStatement = () -> {
System.out.print("Hello");
System.out.println(" World");
};
4.BinaryOperator<Long> add = (x, y) -> x + y;
5.BinaryOperator<Long> addExplicit = (Long x, Long y) -> x + y;

函数式接口

只有一个抽象方法的接口称之为函数式接口。lambda可以很简洁的实现函数式接口。java8自带了一些函数式接口

函数 参数 返回值 example
Predicate<T> T boolean Has this album been released yet?
Consumer<T> T void Printing out a value
Function<T,R> T R Get the name from an Artist obj
Supplier<T> None T A factory method
UnaryOperator<T> T T Logical not (!)
BinaryOperator<T> (T, T) T Multiplying two numbers (*)

Stream

Stream是支持顺序和并行聚合操作的元素序列,并且函数操作基于lambda编程范式实现
java 官网关于Strem特征的介绍

Stream 上的操作为管道操作,它由如下要素构成

  • 数据源,比如集合,数组,IO channel 构成
  • 中间操作,比如filter 过滤操作,distinct去重操作
  • 终止操作,比如 count() or forEach(Consumer))
    流是惰性执行的,仅在启动终止操作时才对源数据执行管道计算
操作类型 接口方法
中间操作 concat() distinct() empty() filter() flatMap() flatMapToDouble() flatMapToInt() flatMapToLong() generate() iterate() limit() map() mapToDouble() mapToInt() mapToLong() of() peek() skip() sorted() parallel() sequential() unordered()
终止操作 allMatch() anyMatch() collect() count() findAny() findFirst() forEach() forEachOrdered() max() min() noneMatch() reduce() toArray()

集合类转Stream

java中的集合类可以方便的转化为Stream 然后应用lambda

Collection 类签名

public interface Collection<E> extends Iterable<E> 

Collection 中提供了两个转化为Stream的方法

  • stream()
  • parallelStream()

list,set,queue因为实现的Collection 接口所以可以直接调用stream()parallelStream()转为Stream
map 没有实现Collection接口,但是map可以调用 map.entrySet(), map.keySet(),map.values()转为集合类然后使用Stream方法

java集合类图

小demo

map格式化为String,以及String 转map

      Map<String, Integer> map = new HashMap<>();
        map.put("A", 1);
        map.put("B", 2);
        String mapString=map.keySet().stream().map(k -> k + "=" + map.get(k)).collect(Collectors.joining(",", "{", "}"));
        System.out.println(mapString);
        Arrays.stream(mapString.split(",")).map(entry->entry.split("=")).collect(Collectors.toMap(e->e[0],e->e[1]));

参考

https://www.cnblogs.com/CarpenterLee/category/965121.html

相关文章

  • 为什么需要lambda

    OOP vs lambda 如果说面向对象编程时对数据的抽象,那么函数式编程就是对行为的抽象。lambda 更利于...

  • Lambda表达式

    Java为什么需要Lambda表达式 Lambda表达式为Java添加了缺少的函数式编程的特点,将函数作为一个参数...

  • 2019-11-06

    1.1 为什么需要Lambda表达式? 使用Lambda表达式可以使代码变的更加紧凑,例如在Java中实现一个线程...

  • 2.JDK1.8特性之Lambda表达式

    1.为什么使用Lambda表达式 2.Lambda表达式语法 3.类型推断 1.为什么使用Lambda表达式 La...

  • 关于 Python中lambda 使用

    在学习python的过程中,lambda的语法时常会使人感到困惑,lambda是什么,为什么要使用lambda,是...

  • Java8 - Lambda(λ) & Functional I

    为什么引入Lambda? 简单的来说Lambda的引入是为了简化匿名类的编写 什么是Lambda表达式 Lambd...

  • python 之lambda表达式

    在学习python的过程中,lambda的语法时常会使人感到困惑,lambda是什么,为什么要使用lambda,是...

  • Lambda 好文收集

    为什么会出现Lambda表达式,你知道吗?Lambda用在哪里?几种场景?学习Lambda表达式看这篇就够了,不会...

  • Java8新特性-001-Lambda表达式

    为什么使用 Lambda 表达式 Lambda 是一个匿名函数,我们可以把 Lambda表达式理解为是一段可以传递...

  • Java8新特性

    为什么使用 Lambda 表达式 Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传...

网友评论

    本文标题:为什么需要lambda

    本文链接:https://www.haomeiwen.com/subject/kurwlftx.html