Java stream 流的基本使用

Java stream 的基本使用

java 复制代码
package com.zhong.streamdemo.usestreamdemo;

import jdk.jfr.DataAmount;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.stream.Stream;

/**
 * @ClassName : UseStream
 * @Description : stream 流的简单使用
 * @Author : zhx
 * @Date: 2024-02-08 15:24
 */
public class UseStream {
    public static void main(String[] args) {
        // filter 过滤不满足条件的元素 返回满足条件的元素
        System.out.println("-------------筛选成绩大于60分的信息-------------");
        ArrayList<Double> strem1 = new ArrayList<>(List.of(60.1, 45.2, 90.2, 99.9, 76.3));
        List<Double> collect = strem1.stream()
                .filter(x -> x > 60)
                .toList();
        System.out.println(collect);

        // stream 对于对象的操作
        System.out.println("-------------stream 对于对象的操作-------------");
        ArrayList<Student> students = new ArrayList<>(List.of(
                new Student("小钟", 22, 179.1),
                new Student("小钟", 22, 179.1),
                new Student("小王", 21, 153.9),
                new Student("小王", 21, 153.9),
                new Student("张三", 52, 160.8),
                new Student("李四", 42, 140.5),
                new Student("王五", 18, 135.3)
        ));
        // 筛选年龄大于 17 且小于 30 的学生信息
        System.out.println("-------------筛选年龄大于 17 且小于 30 的学生信息-------------");
        List<Student> list = students.stream()
                .filter(x -> x.getAge() > 17)       // 过滤年龄小于等于 17 的
                .filter(x -> x.getAge() < 30)       // 过滤年龄大于等于 30 的
                .toList();
        list.forEach(System.out::println);

        // 筛选身高最高的 3 名学生信息
        System.out.println("-------------筛选身高前三的学生信息-------------");
        List<Student> list1 = students.stream()
                .sorted(Comparator.comparing(Student::getHeight))   // 按照身高排序
                .skip(students.size() - 3)                      // skip(n) 忽略数组 -3 长度 相当于截取最后三个元素
                .toList();
        list1.forEach(System.out::println);

        // 筛选身高最后的 2 名学生信息
        System.out.println("-------------筛选身高前三的学生信息-------------");
        List<Student> list2 = students.stream()
                .sorted(Comparator.comparing(Student::getHeight))
                .limit(2)       // 截取几个元素
                .toList();
        list2.forEach(System.out::println);

        // 筛选身高超过 153 的学生的姓名 去除重复的名字
        System.out.println("-------------筛选身高超过 153 的学生的姓名 去除重复的名字-------------");
        List<String> list3 = students.stream()
                .filter(x -> x.getHeight() > 153)
                .map(Student::getName)  // 转换算子
                .distinct()             // distinct() 去重
                .toList();

        // distinct() 去重 如果是对象去重 需要重写 hashCode 和 equals 方法
        System.out.println(list3);

        // Stream.concat(stream1, stream2) 合并流
        System.out.println("-------------Stream.concat(stream1, stream2) 合并流-------------");
        Stream<String> stream1 = Stream.of("张三1", "李四1");
        Stream<String> stream2 = Stream.of("张三2", "李四2", "王五2");
        Stream<String> concatStream = Stream.concat(stream1, stream2);
        concatStream.forEach(System.out::println);
    }
}

@Data
@AllArgsConstructor
@NoArgsConstructor
class Student {
    private String name;
    private int age;
    private double height;

    // distinct() 去重 如果是对象去重 需要重写 hashCode 和 equals 方法
//    @Override
//    public boolean equals(Object o) {
//        if (this == o) return true;
//        if (o == null || getClass() != o.getClass()) return false;
//        Student student = (Student) o;
//        return age == student.age && Double.compare(height, student.height) == 0 && Objects.equals(name, student.name);
//    }
//
//    @Override
//    public int hashCode() {
//        return Objects.hash(name, age, height);
//    }
}
相关推荐
xingpanvip几秒前
星盘接口开发文档:马盘次限盘接口指南
android·开发语言·python·php·lua
FBI HackerHarry浩2 分钟前
第二阶段Day07【Python生成器、yield关键字、property、正则表达式】
开发语言·python·正则表达式
梦想不只是梦与想5 分钟前
Python 中的 4 种作用域
python·作用域
iiiiyu9 分钟前
IO流(二)
java·开发语言·数据结构·编程语言
白露与泡影9 分钟前
牛客网大厂Java面试题全集(2026版,附答案)
java·开发语言
_Evan_Yao10 分钟前
一文搞懂:Git分支管理与团队协作规范——从GitFlow到GitHub Flow,从rebase到merge,打造高效协作流
java·git·后端·github
未若君雅裁15 分钟前
AQS 与 ReentrantLock:队列同步器与可重入锁
java
码语智行17 分钟前
系统启动时初始化数据功能分析
java·spring boot
得物技术23 分钟前
用 LLM Agent 重构告警排查流程|得物技术
java·人工智能·后端
coderwei12324 分钟前
从OpenAI到Strip:用六大支柱读懂Harness Engineering的生产实践
python·ai·ai编程