Stream流简单使用
Stream流简单使用
1 按指定字段获取集合对象中的字段
List<String> idList = initStudentList.stream().map(Student::getId).collect(Collectors.toList());
2 按指定字段对集合对象进行排序
List<Student> collect = initStudentList.stream().sorted(Comparator.comparing(Student::getAge)).collect(Collectors.toList());
3 按指定字段对集合对象去重处理
List<Student> collect = initStudentList.stream().collect(Collectors.collectingAndThen(
Collectors.toCollection(()->new TreeSet<>(Comparator.comparing(Student::getName))), ArrayList::new
));
4 对集合对象批量处理
initStudentList.forEach((Student user) ->user.setName(user.getName()+"-123"));
5 将集合对象中指定字段转数组
String[] strings = initStudentList.stream().map(Student::getId).toArray(String[]::new);
代码如下
学生实体类
public class Student {
private String id;
private String name;
private String sex;
private int age;
private Date birthday;
@Override
public String toString() {
return "User{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
", birthday=" + birthday +
'}';
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
初始化集合数据
public static List<Student> initStudentList(){
List<Student> initStudentList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
Student Student = new Student();
Student.setId(String.valueOf(i*10));
Student.setName("名称"+i);
Student.setAge(i+2*i);
if (i%3!=0){
Student.setSex("男");
}else{
Student.setSex("女");
}
Student.setBirthday(new Date(new Random().nextLong()*(369 - 258)*i));
initStudentList.add(Student);
}
// 设置重复名称用户
Student Student1 = new Student();
Student1.setId(String.valueOf(37));
Student1.setName("名称"+3);
Student1.setAge(11);
Student1.setSex("男");
Student1.setBirthday(new Date(new Random().nextLong()*(369 - 258)*2));
initStudentList.add(Student1);
Student Student2 = new Student();
Student2.setId(String.valueOf(58));
Student2.setName("名称"+5);
Student2.setAge(17);
Student2.setSex("女");
Student2.setBirthday(new Date(new Random().nextLong()*(369 - 258)*2));
initStudentList.add(Student2);
return initStudentList;
}
Test
public class StreamTest {
public static void main(String[] args) {
List<Student> initStudentList = initStudentList();
setOut(initStudentList);
System.out.println("-----------------------------------");
// 流处理
// 1 按指定字段获取集合对象中的字段
/*List<String> idList = initStudentList.stream().map(Student::getId).collect(Collectors.toList());
System.out.println(idList);*/
// 2 按指定字段对集合对象进行排序
/*List<Student> collect = initStudentList.stream().sorted(Comparator.comparing(Student::getAge)).collect(Collectors.toList());
setOut(collect);*/
// 3 按指定字段对集合对象去重处理
/*List<Student> collect = initStudentList.stream().collect(Collectors.collectingAndThen(
Collectors.toCollection(()->new TreeSet<>(Comparator.comparing(Student::getName))), ArrayList::new
));
setOut(collect);*/
// 4 对集合对象批量处理
/*initStudentList.forEach((Student user) ->user.setName(user.getName()+"-123"));
setOut(initStudentList);*/
// 5 将集合对象中指定字段转数组
/*String[] strings = initStudentList.stream().map(Student::getId).toArray(String[]::new);
for (String string : strings) {
System.out.println(string);
}*/
}
public static void setOut(List<Student> list){
for (Student student : list) {
System.out.println(student);
}
}
public static List<Student> initStudentList(){
List<Student> initStudentList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
Student Student = new Student();
Student.setId(String.valueOf(i*10));
Student.setName("名称"+i);
Student.setAge(i+2*i);
if (i%3!=0){
Student.setSex("男");
}else{
Student.setSex("女");
}
Student.setBirthday(new Date(new Random().nextLong()*(369 - 258)*i));
initStudentList.add(Student);
}
// 设置重复名称用户
Student Student1 = new Student();
Student1.setId(String.valueOf(37));
Student1.setName("名称"+3);
Student1.setAge(11);
Student1.setSex("男");
Student1.setBirthday(new Date(new Random().nextLong()*(369 - 258)*2));
initStudentList.add(Student1);
Student Student2 = new Student();
Student2.setId(String.valueOf(58));
Student2.setName("名称"+5);
Student2.setAge(17);
Student2.setSex("女");
Student2.setBirthday(new Date(new Random().nextLong()*(369 - 258)*2));
initStudentList.add(Student2);
return initStudentList;
}
}
结果截图1
结果截图2
结果截图3
结果截图4
结果截图5