Java8 Lambda表达式的快速上手

来源:互联网 发布:网络正常浏览器打不开 编辑:程序博客网 时间:2024/05/12 15:17

工作时遇到了lambda表达式,所以看了看java8中相关的新特性,这里主要讲述了对Collection的操作

1、lambda表达式的写法

lambda表达式写法

举个栗(例)子:

    (int x, int y) -> {System.out.println(x + y)}
    () -> 22

其中,第一个例子为有两个参数x、y,输出x、y的和,第二个例子为无参数,输出值22;

2、forEach方法

java8在Iterable接口中多了一个forEach方法,目的是遍历集合中的元素,简化了之前使用for循环以及其他方法的遍历。

举个栗(例)子:

    List< Person > persons = new ArrayList< Person >();
    persons.forEach( p -> System.out.println(p.getName()) );

这里会输出集合中每个Person的name,一条语句就能办到之前多行代码的操作。当然,在遍历的时候还可以进行你需要的操作。

例如:将每个Person信息都加入到map集合中

    Map< String, Integer > map = new HashMap< String, Integer >();
    persons.forEach( p -> map.put(p.getName(), p.getAge()));

3、stream方法

Collection接口中的方法,返回一个Stream(并行的聚合操作),我觉得可以看作一个中间类,当然,其更多的作用还需要各位去深入挖掘。
接下来的filter、map都需要依赖这个stream()方法。

4、filter方法

过滤集合中的元素,只获取符合要求的元素。

举个栗(例)子:

     persons.stream().filter( p -> p.getAge() > 22).forEach(p -> System.out.println(p.getName()));

这里只会打印出年龄大于22岁的人的名字。

而filter方法中的参数为Predicate类型,所以这里的例子可以改为如下方式:

    Predicate< Person> predicate = p -> p.getAge() > 12;
    persons.stream().filter(predicate).forEach(p -> System.out.println(p.getName()));

这种方式与上面例子所得结果相同。

5、map方法

可以将List集合转换为Map集合。

举个栗(例)子:
如果我们想要取出集合中的名为Tom的人的信息,当然可以遍历集合,从其中取出name为Tom的对象。但是当取元素的操作比较频繁时,这种方法就有些不合适了,此时我们可以以Person的name为key,Person对象为value存储到map集合中。

上面的forEach方法介绍中就有对map的操作,而java8中,我们可以调用api直接在一条语句中实现;

    Map< String, Person > map = persons.stream().collect(Collectors.toMap(p -> p.getName, p -> p));

而map在使用forEach遍历时,需要注意map中每个entry都是有key、value两个值。

    map.forEach((k, v) -> System.out.println(k + “:” + v.getAge()));

这样就会打印出每个人的名字和年龄。

有关lambda表达式的基本使用就以上这些,而java8中的新特性当然也不止lambda表达式,更多的特性及亮点还需要各位自己去探索。
以上是个人理解,大家可以去查阅oracle的官方教程,相信你们也会爱上lambda表达式的。
官方教程请戳这里

原创粉丝点击