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;
}
// 学生id
private 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);
}
打印结果
断点查看
持续更新中…