• 「Java知识」java的lambda骚操作,会几个常用写法感觉档次都不一样了


    介绍语

    本号主要是Java常用关键技术点,通用工具类的分享;以及springboot+springcloud+Mybatisplus+druid+mysql+redis+swagger+maven+docker等集成框架的技术分享;datax、kafka、flink等大数据处理框架的技术分享。文章会不断更新,欢迎码友关注点赞收藏转发!

    望各位码友点击关注,冲1000粉。后面会录制一些视频教程,图文和视频结合,比如:图书介绍网站系统、抢购系统、大数据中台系统等。技术才是程序猿的最爱,码友们冲啊

    如果码友觉得代码太长,可以从头到尾快速扫射一遍,了解大概即可。觉得有用后再转发收藏,以备不时之需。

    正文:

    java的stream用的概率越来越大了,lambda链式写法也越来越让人爱不释手。java的stream api还有很多,是值得好好探索一番的。直接上几个例子,没啥技术含量,只是总结了使用频率较高的几种类型。

    1. 过滤年龄小于10的人;

    2. 按地址分组;

    3. 按地址分组,然后统计薪水情况;

    4. 求最大薪水;

    5. 按年龄从小到大排序;

    6. 按年龄从大到小排序,年龄相同在按名字排序;

    1. import com.alibaba.fastjson.JSON;
    2.  ​
    3.  import java.util.ArrayList;
    4.  import java.util.Arrays;
    5.  import java.util.Comparator;
    6.  import java.util.IntSummaryStatistics;
    7.  import java.util.List;
    8.  import java.util.Map;
    9.  import java.util.Objects;
    10.  import java.util.stream.Collectors;
    11.  ​
    12.  /**
    13.   * @author java老牛
    14.   */
    15.  public class LambdaExample {
    16.  ​
    17.   public static void main(String[] args) {
    18.   String[] str = {"java", "lao", "niu", "爱", "分", "享"};
    19.   List list = Arrays.asList(str);
    20.  ​
    21.   System.out.println("// 最简单的Lambda");
    22.   list.forEach(s -> System.out.print(s + "-"));
    23.   System.out.println("");
    24.  ​
    25.   List poList = new ArrayList<>();
    26.   poList.add(new UserPO("zhang三", 12, "01", 100.2, "北京"));
    27.   poList.add(new UserPO("李四", 18, "01", 990.2, "北京"));
    28.   poList.add(new UserPO("王五", 15, "02", 45.8, "深圳"));
    29.   poList.add(new UserPO("八戒", 8, "02", 1000.8, "上海"));
    30.   poList.add(new UserPO("悟空", 9, "02", 100.2, "上海"));
    31.   poList.add(new UserPO("小红", 12, "01", 50.2, "上海"));
    32.  ​
    33.   System.out.println("// 过滤年龄小于10的人");
    34.   List collect1 = poList.stream().filter(u -> u.getAge() > 10).collect(Collectors.toList());
    35.   collect1.forEach(s -> System.out.println(JSON.toJSON(s)));
    36.  ​
    37.   System.out.println("// 按地址分组");
    38.   Map> collect2 = poList.stream().collect(Collectors.groupingBy(UserPO::getAddress));
    39.   collect2.forEach((k, v) -> {
    40.   System.out.println(k);
    41.   System.out.println(JSON.toJSON(v));
    42.   });
    43.  ​
    44.   System.out.println("// 按地址分组,然后统计薪水情况");
    45.   Map collect3 = poList.stream().collect(
    46.   Collectors.groupingBy(UserPO::getAddress, Collectors.summarizingInt(UserPO::getAge)));
    47.   collect3.forEach((k, s) -> {
    48.   System.out.println("===============" + k + "==========");
    49.   System.out.println("求和:" + s.getSum());
    50.   System.out.println("求平均" + s.getAverage());
    51.   System.out.println("求最大:" + s.getMax());
    52.   System.out.println("求最小:" + s.getMin());
    53.   System.out.println("求总数:" + s.getCount());
    54.   });
    55.  ​
    56.   System.out.println("// 求最大薪水");
    57.   Double max = poList.stream().map(UserPO::getSalary).filter(Objects::nonNull).reduce((double) 0, Double::max);
    58.   System.out.println("max salary: " + max);
    59.  ​
    60.  ​
    61.   System.out.println("// 按年龄从小到大排序");
    62.   List collect4 =
    63.   poList.stream().sorted(Comparator.comparing(UserPO::getAge)).collect(Collectors.toList());
    64.   collect4.forEach(s -> System.out.println(JSON.toJSON(s)));
    65.  ​
    66.   System.out.println("// 按年龄从大到小排序,年龄相同在按名字排序");
    67.   List collect5 =
    68.   poList.stream().sorted(Comparator.comparing(UserPO::getAge).thenComparing(UserPO::getUsername).reversed())
    69.   .collect(Collectors.toList());
    70.   collect5.forEach(s -> System.out.println(JSON.toJSON(s)));
    71.   }
    72.  ​
    73.  ​
    74.  }
    75.  ​
    76.  import lombok.AllArgsConstructor;
    77.  import lombok.Data;
    78.  ​
    79.  /**
    80.   * @author java老牛
    81.   */
    82.  @Data
    83.  @AllArgsConstructor
    84.  public class UserPO {
    85.  ​
    86.   private String username;
    87.  ​
    88.   private Integer age;
    89.  ​
    90.   private String sex;
    91.  ​
    92.   private Double salary;
    93.  ​
    94.   private String address;
    95.  }

    打印结果:

    maven依赖 

    1. <dependency>
    2.   <groupId>org.projectlombokgroupId>
    3.   <artifactId>lombokartifactId>
    4.   <version>1.18.24version>
    5.  dependency>

    鄙人编码十年多,在项目中也积累了一些工具类,很多工具类在每个项目都有在用,很实用。大部分是鄙人封装的,有些工具类是同事封装的,有些工具类已经不记得是ctrl+c的还是自己封装的了,现在有空就会总结项目中大部分的工具类,分享给各位码友。如果文章中涉及的代码有侵权行为请通知鄙人处理。

    计划是先把工具类整理出来,正所谓工欲善其事,必先利其器。项目中不管是普通单体项目还是多模块maven项目或是分布式微服务,一部分功能模块都是可以重用的,工具类模块就是其中之一。

  • 相关阅读:
    领导:给你一个项目,如何开展性能测试工作。我:***
    HIS医疗项目
    什么是继承?什么是组合?为何说要多用组合少用继承?
    OpenCV C++双目三维重建:双目摄像头实现双目测距
    dom的增删改、练习从左到右和从右到左、动态添加和删除行记录
    一张数学地图带你尽览数学分支
    【BOOST C++指针专题06】Boost.ScopeExit
    Polygon zkEVM的Dragon Fruit和Inca Berry升级
    C++类与对象(下)
    关于防重复提交踩的一次坑
  • 原文地址:https://blog.csdn.net/lxn39830435731415926/article/details/126203670