• 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代表相应的集合里的对象

  • 相关阅读:
    Hanlp(汉语言处理包)配置、使用、官方文档
    Mysql 在DOS窗口下的操作
    漂亮的省级下拉选择
    数组的应用排序
    设置外部样式坐标的位置
    动态设置Div坐标
    对联广告
    树形菜单
    隐藏图和图框架
    使用clssneme改变图片或样式
  • 原文地址:https://www.cnblogs.com/xm970829/p/13503723.html
Copyright © 2020-2023  润新知