zoukankan      html  css  js  c++  java
  • Stream常见操作

    一、流的创建

     链接:https://blog.csdn.net/qq_33429968/article/details/76380499 

     提示:由数组创建、由文件创建、由函数生成 要多加练习

    二、Stream重用

    Supplier<Stream<String>> streamSupplier =
        () -> Stream.of("d2", "a2", "b1", "b3", "c")
                .filter(s -> s.startsWith("a"));
    
    streamSupplier.get().anyMatch(s -> true);   // ok
    streamSupplier.get().noneMatch(s -> true);  // ok

    通过Supplier来包装流,达到重用的目的

    三、Java Colletion按对象属性分组、分组汇总等操作示例

    import lombok.Data;
    import lombok.experimental.Accessors;
    
    @Data
    @Accessors(chain = true)
    public class PersonData {
        private String id;
        private String type;
        private String name;
        private int age;
    }

    对象PersonData使用了Lombook的@Data和@Accessors注解。

    public static void main(String[] args) {
        List<PersonData> list = new ArrayList<PersonData>();
        PersonData p1 = new PersonData().setId("1").setName("张三").setType("管理员").setAge(20);
        PersonData p2 = new PersonData().setId("2").setName("李四").setType("管理员").setAge(30);
        PersonData p3 = new PersonData().setId("3").setName("王五").setType("用户").setAge(40);
        PersonData p4 = new PersonData().setId("4").setName("马六").setType("访客").setAge(50);
    
        list.add(p1);
        list.add(p2);
        list.add(p3);
        list.add(p4);
    
        //跟据某个属性分组
        Map<String, List<PersonData>> collect = list.stream().collect(Collectors.groupingBy(PersonData::getType));
        System.out.println(collect);
    
        //根据某个属性分组,汇总某个属性
        Map<String, Integer> collect2 = list.stream().collect(Collectors.groupingBy(PersonData::getType, Collectors.summingInt(PersonData::getAge)));
        System.out.println(collect2);
    
        //判断一组对象里面有没有属性值是某个值
        boolean add = list.stream().anyMatch(m -> "王五".equals(m.getName()));
        System.out.println(add);
    
        //取出一组对象的某个属性组成一个新集合(转化)
        List<String> names = list.stream().map(PersonData::getName).collect(Collectors.toList());
        System.out.println(names);
    }

    结果输出(JDK14):

    {用户=[PersonData(id=3, type=用户, name=王五, age=40)], 访客=[PersonData(id=4, type=访客, name=马六, age=50)], 管理员=[PersonData(id=1, type=管理员, name=张三, age=20), PersonData(id=2, type=管理员, name=李四, age=30)]}
    {用户=40, 访客=50, 管理员=50}
    true
    [张三, 李四, 王五]

    四、利用Stream API合并Map中的元素

    Map<String, Employee> map3 = Stream.of(map1, map2)
      .flatMap(map -> map.entrySet().stream())
      .collect(Collectors.toMap(
        Map.Entry::getKey,
        Map.Entry::getValue,
        (v1, v2) -> new Employee(v1.getId(), v2.getName())));
    
    // 利用Collectors.toMap()实现Map合并功能
  • 相关阅读:
    用Python在地图上模拟疫情扩散
    Word VBA 单元格处理
    SAR目标检测相关文献整理
    anaconda+pycharm+flask环境搭建
    航空遥感图像(Aerial Images)目标检测数据集汇总
    VS2017新建或拷贝项目编译时出现:找不到 Windows SDK 版本8.1.请安装所需的版本的 Windows SDK
    opencv图像裁剪与拼接
    OpenCV之光流法运动目标跟踪
    R = [obj for obj in recs[imagename] if obj['name'] == classname] KeyError:'1'
    xml.etree.ElementTree.ParseError: not well-formed (invalid token)
  • 原文地址:https://www.cnblogs.com/echo1937/p/13069230.html
Copyright © 2011-2022 走看看