Java 8 Stream常用方法

本文介绍了Java8引入的Stream API,展示了如何使用map、filter、limit、sorted、distinct等方法进行数据处理。通过实例演示了如何进行数据过滤、转换、排序和去重,以及如何利用Collectors进行聚合操作,如join、toSet和toMap。Stream API极大地提升了代码的简洁性和效率。
摘要由CSDN通过智能技术生成

Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。
Stream(流)是一个来自数据源的元素队列并支持聚合操作。
Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。
简单总结一下常用的API方法

数据准备

DTO

public class StreamDemoDTO {
    private int id;
    private String name;
    private int age;
    private int sex;
    private Date birthDay;
    // getter && setter
    // Override toString for print
 }

init

   public static void initList() throws ParseException {
        sdf.applyPattern(YYYY_MM_DD_PATTERN);
        StreamDemoDTO dto1 = new StreamDemoDTO(1,"刘一",18,0,sdf.parse("1990-11-22"));
        StreamDemoDTO dto2 = new StreamDemoDTO(1,"陈二",20,1,sdf.parse("2000-10-22"));
        StreamDemoDTO dto3 = new StreamDemoDTO(1,"张三",16,1,sdf.parse("1998-01-12"));
        StreamDemoDTO dto4 = new StreamDemoDTO(1,"李四",55,0,sdf.parse("1990-11-05"));
        StreamDemoDTO dto5 = new StreamDemoDTO(1,"王五",60,0,sdf.parse("1990-06-06"));
        StreamDemoDTO dto6 = new StreamDemoDTO(1,"赵六",33,1,sdf.parse("1997-01-09"));
        StreamDemoDTO dto7 = new StreamDemoDTO(1,"钱七",40,0,sdf.parse("1994-02-09"));
        StreamDemoDTO dto8 = new StreamDemoDTO(1,"周八",28,1,sdf.parse("1999-12-18"));
        StreamDemoDTO dto9 = new StreamDemoDTO(1,"吴九",31,0,sdf.parse("1990-05-22"));
        StreamDemoDTO dto10 = new StreamDemoDTO(1,"郑十",30,1,sdf.parse("1995-04-03"));
        demoDTOList.add(dto1);
        demoDTOList.add(dto2);
        demoDTOList.add(dto3);
        demoDTOList.add(dto4);
        demoDTOList.add(dto5);
        demoDTOList.add(dto6);
        demoDTOList.add(dto7);
        demoDTOList.add(dto8);
        demoDTOList.add(dto9);
        demoDTOList.add(dto10);
    }

forEach

迭代流中的每个数据

	demoDTOList.forEach(System.out::println);
	demoDTOList.forEach( dto -> {
		System.out.println(dto.getName());
	});

map

用于映射每个元素到对应的结果

List<Integer> idList = demoDTOList.stream().map(StreamDemoDTO::getId).collect(Collectors.toList());

filter

用于通过设置的条件过滤出元素

List<StreamDemoDTO> ageBiggerThan18 = demoDTOList.stream().filter(streamDemoDTO -> streamDemoDTO.getAge() > 18).collect(Collectors.toList());

limit

用于获取指定数量的流

List<StreamDemoDTO> limitDemoList = demoDTOList.stream().limit(3).collect(Collectors.toList());

sorted

用于对流进行排序

List<StreamDemoDTO> sortedByAgeList = demoDTOList.stream().sorted(Comparator.comparing(StreamDemoDTO::getAge)).collect(Collectors.toList());

count

long count = demoDTOList.stream().count();

distinct

用于去重

List<String> distinctNameList = demoDTOList.stream().map(StreamDemoDTO::getName).distinct().collect(Collectors.toList());

reversed

用于反转顺序

List<StreamDemoDTO> sortedByAgeDescList = demoDTOList.stream().sorted(Comparator.comparing(StreamDemoDTO::getAge).reversed()).collect(Collectors.toList());

Collectors

实现了很多归约操作

String names = demoDTOList.stream().map(StreamDemoDTO::getName).collect(Collectors.joining(","));
Set<String> nameSet = demoDTOList.stream().map(StreamDemoDTO::getName).collect(Collectors.toSet());
List<String> distinctNameList = demoDTOList.stream().map(StreamDemoDTO::getName).distinct().collect(Collectors.toList());
Map<Integer, StreamDemoDTO> streamDemoDTOMap = demoDTOList.stream().collect(Collectors.toMap(StreamDemoDTO::getId, Function.identity()));

findAny

StreamDemoDTO findAny = demoDTOList.stream().findAny().get();

findFirst

StreamDemoDTO findFirst = demoDTOList.stream().findFirst().get();

实际场景下,需要根据需求使用各个API的组合才能满足代码需要。
代码参考:https://gitee.com/code-promotion/my-code-test/tree/dev/src/main/java/cn/pengld/streamtest

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值