java8 Stream流常用方法
- 1.过滤数据中年龄大于等于十八的学生
- 2.获取对象中其中的一个字段并添加到集合(以学生姓名(name)为例)
- 3.获取对象中其中的一个字段并转为其他数据类型最后添加到集合(以学生性别(sex)为例,将String转为Integer类型)
- 4.将对象中某个字段作为key,某个字段作为value(以id作为key,name作为value为例)
- 5.将对象中某个字段作为key,某个字段作为value(以id作为key,学生对象作为value为例)
操作对象
package com.example.entity;import lombok.Data;@Data
public class Student {public Student(Integer id, String name, Integer age, String sex) {this.id = id;this.name = name;this.age = age;this.sex = sex;}// 学生idprivate Integer id;// 学生姓名private String name;// 学生年龄private Integer age;// 学生性别 0-女,1-男private String sex;}
模拟数据
public static void main(String[] args) {// 模拟数据Student s1 = new Student(100, "张三", 19, "1");Student s2 = new Student(101, "李四", 17, "1");Student s3 = new Student(102, "Lisa", 18, "0");Student s4 = new Student(103, "Jack", 19, "1");// 将模拟数据存入集合中List<Student> list = Arrays.asList(s1, s2, s3, s4);}
操作
1.过滤数据中年龄大于等于十八的学生
public static void main(String[] args) {// 模拟数据Student s1 = new Student(100, "张三", 19, "1");Student s2 = new Student(101, "李四", 17, "1");Student s3 = new Student(102, "Lisa", 18, "0");Student s4 = new Student(103, "Jack", 19, "1");// 将模拟数据存入集合中List<Student> list = Arrays.asList(s1, s2, s3, s4);// 筛选学生中年龄大于等于18的学生List<Student> collect = list.stream().filter(student -> student.getAge() >= 18).collect(Collectors.toList());// 打印新集合中的数据if (collect.size() > 0) {collect.forEach(System.out::println);}}
打印结果
2.获取对象中其中的一个字段并添加到集合(以学生姓名(name)为例)
public static void main(String[] args) {// 模拟数据Student s1 = new Student(100, "张三", 19, "1");Student s2 = new Student(101, "李四", 17, "1");Student s3 = new Student(102, "Lisa", 18, "0");Student s4 = new Student(103, "Jack", 19, "1");// 将模拟数据存入集合中List<Student> list = Arrays.asList(s1, s2, s3, s4);// 获取对象中其中的一个字段并添加到集合(以学生姓名(name)为例)List<String> collect = list.stream().map(Student::getName).collect(Collectors.toList());// 打印结果collect.forEach(System.out::println);}
打印结果
3.获取对象中其中的一个字段并转为其他数据类型最后添加到集合(以学生性别(sex)为例,将String转为Integer类型)
注意:异常自己捕捉,就比如这里String转Intger就可能出现NumberFormatException异常
public static void main(String[] args) {// 模拟数据Student s1 = new Student(100, "张三", 19, "1");Student s2 = new Student(101, "李四", 17, "1");Student s3 = new Student(102, "Lisa", 18, "0");Student s4 = new Student(103, "Jack", 19, "1");// 将模拟数据存入集合中List<Student> list = Arrays.asList(s1, s2, s3, s4);// 获取对象中其中的一个字段并转为其他数据类型最后添加到集合(以学生性别(sex)为例,将String转为Integer类型)List<Integer> collect = list.stream().map(Student::getSex).map(Integer::parseInt).collect(Collectors.toList());// 打印结果collect.forEach(System.out::println);}
打印结果
4.将对象中某个字段作为key,某个字段作为value(以id作为key,name作为value为例)
public static void main(String[] args) {// 模拟数据Student s1 = new Student(100, "张三", 19, "1");Student s2 = new Student(101, "李四", 17, "1");Student s3 = new Student(102, "Lisa", 18, "0");Student s4 = new Student(103, "Jack", 19, "1");// 将模拟数据存入集合中List<Student> list = Arrays.asList(s1, s2, s3, s4);// 取对象id为key,其他选一个字段为value(以学生姓名为例)Map<Integer, String> map = list.stream().collect(Collectors.toMap(Student::getId, Student::getName));System.out.println(map);}
打印结果
断点查看
5.将对象中某个字段作为key,某个字段作为value(以id作为key,学生对象作为value为例)
public static void main(String[] args) {// 模拟数据Student s1 = new Student(100, "张三", 19, "1");Student s2 = new Student(101, "李四", 17, "1");Student s3 = new Student(102, "Lisa", 18, "0");Student s4 = new Student(103, "Jack", 19, "1");// 将模拟数据存入集合中List<Student> list = Arrays.asList(s1, s2, s3, s4);// 取对象id为key,对象为value(以学生id为key,学生对象为value为例)Map<Integer, Student> map = list.stream().collect(Collectors.toMap(Student::getId, Function.identity()));System.out.println(map);}
打印结果
断点查看
持续更新中…