【JDK 1.8】 stream 操作

本文详细介绍了Java 8的Stream API,包括过滤、取前几、跳过元素、去重、排序等中间操作,以及映射、断言、求和、平均值等结果操作。通过实例展示了如何在实际开发中使用Stream API处理数据集合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【JDK 1.8】 stream 操作


前言

Stream 翻译称为 “流”,是 Java8 的新特性之一。 Stream 将要处理的元素看作是流,这时可以借助 Stream API 对流中的元素进行中间操作,比如:筛选、排序、排序等。


中间过程

/**
 * 过滤
 */
log.warning("过滤");
projectList.stream().filter(a->a.getProjectCount()!=null).forEach(System.out::println);

/**
 * 取前几
 */
log.info("取前几");
long count = listMap.stream().limit(2).count();
System.out.println("名次--->"+count);

/**
 * 跳过n元素,配合limit(n)可实现分页
 */
log.info("跳过n元素,配合limit(n)可实现分页");
projectList.stream().skip(2).limit(1).forEach(System.out::println);


/**
 * 去重
 */
log.info("去重");
projectList.stream().distinct().forEach(System.out::println);

/**
 * 排序
 */
log.info("排序--正序");
projectList.stream().filter(a->a.getProjectCount()!=null)
        .sorted(Comparator.comparing(Project::getProjectCount)).collect(Collectors.toList()).forEach(System.out::println);
log.info("排序--倒序");
projectList.stream().filter(a->a.getProjectCount()!=null)
        .sorted(Comparator.comparing(Project::getProjectCount).reversed()).collect(Collectors.toList()).forEach(System.out::println);

结果集

 /**
  * map映射--list对象某个属性转list
  */
 log.info("map映射--list对象某个属性转list");
 projectList.stream().map(a->a.getProjectName()).collect(Collectors.toList()).forEach(System.out::println);

 /**
  *
  * map映射--list对象某个属性转<Map>
  *
  */
 log.info("map映射--list对象某个属性转List<Map>");
 Map<String, BigDecimal> collect = projectList.stream().filter(a->a.getProjectCount()!=null).collect(Collectors.toMap(Project::getProjectName, Project::getProjectCount,(k1,k2)->k1));
 System.out.println(collect);

 /**
  * 都符合为true,断言
  */
 boolean b = projectList.stream().allMatch(a ->a.getProjectCount()!=null);
 System.out.println(b);


 /**
  * 都不符合为true,断言
  */
 boolean b1 = projectList.stream().noneMatch(a -> a.getProjectName().equals("条约"));
 System.out.println(b1);

 /**
  * 只要有一个就为true,断言
  */
 boolean b2 = projectList.stream().anyMatch(a -> a.getProjectCount() == null);
 System.out.println(b2);

 /**
  * 返回list中第一名
  */
 Project project = projectList.stream().findFirst().get();
 System.out.println("第一个屈辱条约->"+project);

  /**
  * 返回list中最大值
  */
 Project project1 = projectList.stream().filter(a->a.getProjectCount()!=null).max(Comparator.comparing(Project::getProjectCount)).get();
 System.out.println("赔款最多的条约->"+project1);


 /**
  * 返回list中最小值
  */
 Project project2 = projectList.stream().filter(a->a.getProjectCount()!=null).min(Comparator.comparing(Project::getProjectCount)).get();
 System.out.println("赔款最少的条约->"+project2);


 /**
  * list分组
  */

 Map<String, List<Project>> collect1 = projectList.stream().collect(Collectors.groupingBy(Project::getProjectName));
 System.out.println(collect1);


 /**
  * 字符串分隔符连接
  */
 String collect2 = projectList.stream().distinct().map(Project::getProjectName).collect(Collectors.joining(",", "(", ")"));
 System.out.println(collect2);

 /**
  * list 中某属性求和
  */
 Double collect3 = projectList.stream().filter(a -> a.getProjectCount() != null).collect(Collectors.summingDouble(Project::getProjectId));

 System.out.println(collect3);

 double sum = projectList.stream().filter(a -> a.getProjectCount() != null).mapToDouble(Project::getProjectId).sum();
 System.out.println(sum);

 BigDecimal reduce = projectList.stream().filter(a -> a.getProjectCount() != null).map(Project::getProjectCount).reduce(BigDecimal.ZERO, BigDecimal::add);
 System.out.println(reduce);


 /**
  * list 中某属性求平均值
  */
 Double collect4 = projectList.stream().filter(a -> a.getProjectCount() != null).collect(Collectors.averagingDouble(Project::getProjectId));

 System.out.println(collect4);

 /**
  * 数据集合
  */
 DoubleSummaryStatistics collect5 = projectList.stream().filter(a -> a.getProjectCount() != null).collect(Collectors.summarizingDouble(Project::getProjectId));

 System.out.println(collect5.getMax());
 System.out.println(collect5.getAverage());
 System.out.println(collect5.getCount());

 /**
  * 分区
  */

 Map<Boolean, List<Project>> collect6 = projectList.stream().collect(Collectors.partitioningBy(a -> a.getProjectCount() != null));

 System.out.println(collect6);


 /**
  * 排序
  */
-- desc
dtoList.sort(Comparator.comparing(EnterprisePropertyDto::getRemovalRate,Comparator.nullsLast(Comparator.reverseOrder())));

-- asc
dtoList.sort(Comparator.comparing(EnterprisePropertyDto::getDealNum,Comparator.nullsLast(Comparator.naturalOrder())));

测试类

package test;



import java.math.BigDecimal;
import java.util.*;
import java.util.logging.Logger;
import java.util.stream.Collectors;

/**
 * JDK 1.8 流操作
 * @author Abner G
 * @date 2022/3/6 20:05
 */

public class StreamTest {


    private static String name = StreamTest.class.getName();
    private static Logger log = Logger.getLogger(name);

    private static final List<Map<String,Object>> listMap=new ArrayList<>();

    private static final List<Project> projectList=new ArrayList<>();

    static {
        Map<String, Object> map1 = new HashMap<>();
        Map<String, Object> map2 = new HashMap<>();
        Map<String, Object> map3 = new HashMap<>();

        map1.put("abner","博客");
        map2.put("java","计算机语言");
        map3.put("Clickhouse","数据库");
        listMap.add(map1);
        listMap.add(map2);
        listMap.add(map3);

        Project project1 = new Project(1, "南京条约", new BigDecimal("10000"));
        Project project2 = new Project(2, "马关条约", new BigDecimal("30000"));
        Project project3 = new Project(3, "辛丑条约", null);
        Project project4 = new Project(2, "天津条约", new BigDecimal("20000"));

        projectList.add(project1);
        projectList.add(project2);
        projectList.add(project3);
        projectList.add(project4);
        projectList.add(project4);
    }

    public static void main(String[] args) {
        /**
         * 过滤
         */
        log.warning("过滤");
        projectList.stream().filter(a->a.getProjectCount()!=null).forEach(System.out::println);

        /**
         * 取前几
         */
        log.info("取前几");
        long count = listMap.stream().limit(2).count();
        System.out.println("名次--->"+count);

        /**
         * 跳过n元素,配合limit(n)可实现分页
         */
        log.info("跳过n元素,配合limit(n)可实现分页");
        projectList.stream().skip(2).limit(1).forEach(System.out::println);


        /**
         * 去重
         */
        log.info("去重");
        projectList.stream().distinct().forEach(System.out::println);

        /**
         * 排序
         */
        log.info("排序--正序");
        projectList.stream().filter(a->a.getProjectCount()!=null)
                .sorted(Comparator.comparing(Project::getProjectCount)).collect(Collectors.toList()).forEach(System.out::println);
        log.info("排序--倒序");
        projectList.stream().filter(a->a.getProjectCount()!=null)
                .sorted(Comparator.comparing(Project::getProjectCount).reversed()).collect(Collectors.toList()).forEach(System.out::println);


        /**
         * map映射--list对象某个属性转list
         */
        log.info("map映射--list对象某个属性转list");
        projectList.stream().map(a->a.getProjectName()).collect(Collectors.toList()).forEach(System.out::println);

        /**
         *
         * map映射--list对象某个属性转<Map>
         *
         */
        log.info("map映射--list对象某个属性转List<Map>");
        Map<String, BigDecimal> collect = projectList.stream().filter(a->a.getProjectCount()!=null).collect(Collectors.toMap(Project::getProjectName, Project::getProjectCount,(k1,k2)->k1));
        System.out.println(collect);

        /**
         * 都符合为true,断言
         */
        boolean b = projectList.stream().allMatch(a ->a.getProjectCount()!=null);
        System.out.println(b);


        /**
         * 都不符合为true,断言
         */
        boolean b1 = projectList.stream().noneMatch(a -> a.getProjectName().equals("条约"));
        System.out.println(b1);

        /**
         * 只要有一个就为true,断言
         */
        boolean b2 = projectList.stream().anyMatch(a -> a.getProjectCount() == null);
        System.out.println(b2);

        /**
         * 返回list中第一名
         */
        Project project = projectList.stream().findFirst().get();
        System.out.println("第一个屈辱条约->"+project);

         /**
         * 返回list中最大值
         */
        Project project1 = projectList.stream().filter(a->a.getProjectCount()!=null).max(Comparator.comparing(Project::getProjectCount)).get();
        System.out.println("赔款最多的条约->"+project1);


        /**
         * 返回list中最小值
         */
        Project project2 = projectList.stream().filter(a->a.getProjectCount()!=null).min(Comparator.comparing(Project::getProjectCount)).get();
        System.out.println("赔款最少的条约->"+project2);


        /**
         * list分组
         */

        Map<String, List<Project>> collect1 = projectList.stream().collect(Collectors.groupingBy(Project::getProjectName));
        System.out.println(collect1);


        /**
         * 字符串分隔符连接
         */
        String collect2 = projectList.stream().distinct().map(Project::getProjectName).collect(Collectors.joining(",", "(", ")"));
        System.out.println(collect2);

        /**
         * list 中某属性求和
         */
        Double collect3 = projectList.stream().filter(a -> a.getProjectCount() != null).collect(Collectors.summingDouble(Project::getProjectId));

        System.out.println(collect3);

        double sum = projectList.stream().filter(a -> a.getProjectCount() != null).mapToDouble(Project::getProjectId).sum();
        System.out.println(sum);

        BigDecimal reduce = projectList.stream().filter(a -> a.getProjectCount() != null).map(Project::getProjectCount).reduce(BigDecimal.ZERO, BigDecimal::add);
        System.out.println(reduce);


        /**
         * list 中某属性求平均值
         */
        Double collect4 = projectList.stream().filter(a -> a.getProjectCount() != null).collect(Collectors.averagingDouble(Project::getProjectId));

        System.out.println(collect4);

        /**
         * 数据集合
         */
        DoubleSummaryStatistics collect5 = projectList.stream().filter(a -> a.getProjectCount() != null).collect(Collectors.summarizingDouble(Project::getProjectId));

        System.out.println(collect5.getMax());
        System.out.println(collect5.getAverage());
        System.out.println(collect5.getCount());

        /**
         * 分区
         */

        Map<Boolean, List<Project>> collect6 = projectList.stream().collect(Collectors.partitioningBy(a -> a.getProjectCount() != null));

        System.out.println(collect6);


    }









}


class Project{

    private Integer projectId;


    private String projectName;


    private BigDecimal projectCount;

    public Project(Integer projectId, String projectName, BigDecimal projectCount) {
        this.projectId = projectId;
        this.projectName = projectName;
        this.projectCount = projectCount;
    }

    public Integer getProjectId() {
        return projectId;
    }

    public void setProjectId(Integer projectId) {
        this.projectId = projectId;
    }

    public String getProjectName() {
        return projectName;
    }

    public void setProjectName(String projectName) {
        this.projectName = projectName;
    }

    public BigDecimal getProjectCount() {
        return projectCount;
    }

    public void setProjectCount(BigDecimal projectCount) {
        this.projectCount = projectCount;
    }

    @Override
    public String toString() {
        return "Project{" +
                "projectId=" + projectId +
                ", projectName='" + projectName + '\'' +
                ", projectCount=" + projectCount +
                '}';
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Abner G

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值