zoukankan      html  css  js  c++  java
  • lambada表达式对集合的过滤和相互转换

    lambada表达式对集合的过滤和相互转换

    引言:

    假设一个场景:
    对一个student的list集合进行操作,我要找出年龄大于20的student,重新组成一个student集合。
    没有学习lambada表达式的第一想法肯定是通过for循环,再将符合条件的依次加入新的student集合中。思路很简单。但是通过for循环的方式和lambada相比较,差的不是一星半点。

    1、实现引言中的场景

    假设要过滤的list为studentlist。里面的年龄属性为age,获取方法是getAge()。名字属性是name,获取方法是getName();

    如下:

    List<Student> newList = studentlist.stream().filter(v -> v.getAge() > 20).collect(Collectors.toList());
    

    像这样,一行代码,我们就可以得到我们想要的结果了。
    这个场景同样也是分两部分来完成的。首先通过filter过滤,其次通过Collect.toList()将过滤之后的结果重新组装成一个新的list集合。

    2、list集合转换set集合

    假设list是student集合

    Set<Student> set = list.stream().collect(Collectors.toSet());
    

    3、list转成map集合

    假设list是student集合

    Map<String,Integer> map = list.stream().collect(Collectors.toMap( getName(),getAge());
    

    这样就获得了一个key为name,value为age的map集合。

    总结

    这里只将一种list转成list、set、map的方式。如set转成set、list、map和map转成map、list、set是一样的做法。
    总之,通过lambda对集合的过滤是通过filter(过滤条件)方法的。
    结合之间的转换是通过
    1、collect(Collectors.toList())、
    2、 collect(Collectors.toSet())、
    3、collect(Collectors.toMap(key,value))这三种方式。
    额外需要注意的是,将集合转成stream(流)。
    list和set是可以直接调用stream()方法从而将自身变成流的形式。
    但是map集合不支持,需要先调用entrySet()方法,再调用stream()方法才可将map转成流的形式。

    对于lambda所提到的 e-> e.getXX() 之类代码,e到底代表着什么?
    我的理解是,集合中的单个元素。不管在哪出现,都是相应集合中的单个元素,对map而言是代表一个entry(键值对)。list、set代表相应的集合里的对象

  • 相关阅读:
    让他人变得优秀是伟大
    年龄越大,离家越远
    秋天的叶子
    [短彩信]C#短彩信模块开发设计(2)——配置
    jquery实现网页二级菜单简单代码
    HTML页面做中间页跳转传递参数
    ToJson
    Button页面中的按钮
    SQLSERVER 18056 错误
    在桌面添加可拖动/点击的悬浮窗口
  • 原文地址:https://www.cnblogs.com/xm970829/p/13503723.html
Copyright © 2011-2022 走看看