我是靠谱客的博主 鲤鱼唇膏,最近开发中收集的这篇文章主要介绍java8关于stream的部分用法java8关于stream的部分用法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 前言
  • stream 应用
    • list集合分组后按时间排序取最近的一条记录
    • 对List元素通过某个值进行排序
    • 对List集合中元素进行字符串拼接
    • List集合转换成map的几种情况

前言

Java 8 API添加了一个新的抽象称为流Stream,可以以一种声明的方式处理数据。
Stream(流)是一个来自数据源的元素队列并支持聚合操作。Java8中可以通过串行流stream()和并行流parallelStream()生成流

stream 应用

list集合分组后按时间排序取最近的一条记录

集合按照id进行分组后,按照时间顺序取最近一条记录

List<Documnet> list = new ArrayList<>();
Map<String, Document> map = list.parallelStream().collect(Collectors.groupingBy(data -> data.getString("id"),
        Collectors.collectingAndThen(Collectors.reducing(
                (c1, c2) -> DateUtil.compare(c1.getDate("data_time"), c2.getDate("data_time")) > 0 ? c1 : c2), 
                Optional<Document>::get
        )));

对List元素通过某个值进行排序

List<User> list = new ArrayList<>();
// 正序
List<User> collect = list.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList());
//倒序
List<User> collect = list.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(Collectors.toList());
//常用数据类型排序
List<Date> dateList = new ArrayList<>();
List<Date> collect =dateList.stream().sorted().collect(Collectors.toList());
List<Date> collect =dateList.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());

对List集合中元素进行字符串拼接

//简单的List<String> 可以通过String.join来实现字符串拼接
List<String> strs = new ArrayList<>();
String.join("", strs);
//对象列表,需要其中某个字段进行拼接时可用下面方法进行操作
List<User> list = new ArrayList<>();
list.stream().map(User::getName).collect(Collectors.joining(","));

List集合转换成map的几种情况

1、通过toMap()将list转换成map
java8中toMap方法
参数 mergeFunction 的作用是当出现 key 重复时,自定义对value 的处理策略

List<User> list = new ArrayList<>();
// list转换成map key为ID,value为name
Map<Long, String> map = list.stream().collect(Collectors.toMap(User::getId,User::getName));
// list转换成map key为ID,value为user对象
Map<Long, String> map = list.stream().collect(Collectors.toMap(User::getId, user->user));
Map<Long, String> map = list.stream().collect(Collectors.toMap(User::getId, Function.identity()));
// list转换成map key为ID,value为user对象,如果存在重复key时,取其中第一个数据k1
Map<Long, String> map = list.stream().collect(Collectors.toMap(User::getId, Function.identity(), (k1,k2) -> k1));

Function.identity()方法Function是一个接口,identity是接口下的一个方法,返回一个lambda函数表达式,即输出内容为输入内容

    /**
     * Returns a function that always returns its input argument.
     *
     * @param <T> the type of the input and output objects to the function
     * @return a function that always returns its input argument
     */
    static <T> Function<T, T> identity() {
        return t -> t;
    }

2、 通过groupingBy()实现分组转换成map

List<User> list = new ArrayList<>();
//1、通过性别对用户进行分组
Map<String, List<User>> map = list.stream().collect(Collectors.groupingBy(User::getSex));
//2、先通过性别对用户进行分组,在对分组后的用户通过年龄进行分组
Map<String, Map<Integer, List<User>>> map = list.stream().collect(Collectors.groupingBy(User::getSex, Collectors.groupingBy(User::getAge)));
//3、先通过性别对用户进行分组,分组后仅展示用户年龄集合(可通过toList(),toSet()选择具体是list还是set集合)
	Map<String, List<Integer>> map3 = list.stream().collect(
                Collectors.groupingBy(User::getSex,
                        Collectors.mapping(User::getAge, Collectors.toList())
                ));
//4、先通过性别进行分组,分组后对年龄进行求和(可通过summingInt,averagingInt等方法进行求和求平均等计算)
        Map<String, Integer> map = list.stream().collect(
                Collectors.groupingBy(User::getSex,
                        Collectors.summingInt((User::getAge)
                        )));

最后

以上就是鲤鱼唇膏为你收集整理的java8关于stream的部分用法java8关于stream的部分用法的全部内容,希望文章能够帮你解决java8关于stream的部分用法java8关于stream的部分用法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部