• 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合并功能
  • 相关阅读:
    [置顶] 基于平板电脑的面访调查
    spring技术翻译开始
    (3)选择元素——(9)为交替的列加样式(Styling alternate rows)
    网页换肤
    djano-cms学习笔计(一)
    【Android】Activity的菜单机制和方法解析
    canvas
    Flexbox-CSS3弹性盒模型flexbox完整版教程
    原生js获取鼠标坐标方法全面讲解:clientX/Y,pageX/Y,offsetX/Y,layerX/Y,screenX/Y
    怎么使用jquery判断一个元素是否含有一个指定的类(class)
  • 原文地址:https://www.cnblogs.com/echo1937/p/13069230.html
Copyright © 2020-2023  润新知