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

  • 相关阅读:
    关于Maya Viewport 2.0 API 开发的介绍视频
    春节大假
    Some tips about the life cycle of Maya thread pool
    Can I compile and run Dx11Shader for Maya 2015 on my side?
    How to get current deformed vertex positions in MoBu?
    想加入全球首届的 欧特克云加速计划吗?
    三本毕业(非科班),四次阿里巴巴面试,终拿 offer(大厂面经)
    mac、window版编辑器 webstorm 2016... 永久破解方法。
    node 搭载本地代理,处理web本地开发跨域问题
    js 一维数组,转成嵌套数组
  • 原文地址:https://www.cnblogs.com/xm970829/p/13503723.html
Copyright © 2011-2022 走看看