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);
//    }
}
相关推荐
文言一心8 分钟前
LINUX离线升级 Python 至 3.11.9 操作手册
linux·运维·python
诗词在线29 分钟前
中国古代诗词名句按主题分类有哪些?(爱国 / 思乡 / 送别)
人工智能·python·分类·数据挖掘
高锰酸钾_39 分钟前
机器学习-L1正则化和L2正则化解决过拟合问题
人工智能·python·机器学习
2401_8823515241 分钟前
Flutter for OpenHarmony 商城App实战 - 会员中心实现
windows·flutter
南知意-1 小时前
IDEA 2025.3 版本安装指南(完整图文教程)
java·intellij-idea·开发工具·idea安装
天天睡大觉1 小时前
Python学习11
网络·python·学习
智航GIS1 小时前
11.11 Pandas性能革命:向量化操作与内存优化实战指南
python·pandas
码农水水2 小时前
蚂蚁Java面试被问:混沌工程在分布式系统中的应用
java·linux·开发语言·面试·职场和发展·php
海边的Kurisu2 小时前
苍穹外卖日记 | Day4 套餐模块
java·苍穹外卖
毕设源码-邱学长2 小时前
【开题答辩全过程】以 走失儿童寻找平台为例,包含答辩的问题和答案
java