package com.liurq.other.jdk8streamdemo;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
public class StreamDemo {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("张三");
list.add("张三");
list.add("李四");
list.add("王五");
list.add("刘六");
list.add("孙七");
list.add("郝八");
//统计个数--7
System.out.println(list.stream().count());
//去重--[张三, 李四, 王五, 刘六, 孙七, 郝八]
List<String> distinctList = list.stream().distinct().collect(Collectors.toList());
//遍历
distinctList.stream().forEach(a-> System.out.println(a));
//过滤--[李四, 王五, 刘六, 孙七, 郝八]
List<String> filterList = list.stream().filter(a -> !"张三".equals(a)).collect(Collectors.toList());
System.out.println(filterList);
//限制个数 --[李四, 王五, 刘六]
List<String> limitList = filterList.stream().limit(3).collect(Collectors.toList());
System.out.println(limitList);
//跳过 --[王五, 刘六, 孙七, 郝八] --从第三个开始
List<String> skipList = list.stream().skip(3).collect(Collectors.toList());
System.out.println(skipList);
//map映射 [1, 2, 3, 4, 5, 6, 7, 8, 9]
List<Integer> ints = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
List<String> mapList = ints.stream().map(a -> a + "").collect(Collectors.toList());
System.out.println(mapList);
ArrayList<User> users = new ArrayList<>();
users.add(new User("张三",12,180.5D,"1"));
users.add(new User("张三",18,180.5D,"2"));
users.add(new User("李四",23,169.5D,"2"));
users.add(new User("王五",45,178D,"2"));
users.add(new User("刘六",12,123D,"2"));
users.add(new User("孙七",54,189D,"1"));
users.add(new User("郝八",23,185.2D,"1"));
//[User{name='张三', age=12, height=180.5, sex='1'}, User{name='孙七', age=54, height=189.0, sex='1'}, User{name='郝八', age=23, height=185.2, sex='1'}]
List<User> manList = users.stream().filter(a -> a.getSex().equals("1")).collect(Collectors.toList());
System.out.println(manList);
//处理某个字段,注意此用法会影响原来的对象的值
List<User> nameAdd1List = users.stream().map(a -> {
User clone = (User)a.clone();
if (clone != null){
clone.setName(a.getName() + "1");
}
return clone;
}).collect(Collectors.toList());
//[User{name='张三1', age=12, height=180.5, sex='1'}, User{name='张三1', age=18, height=180.5, sex='2'}, User{name='李四1', age=23, height=169.5, sex='2'}, User{name='王五1', age=45, height=178.0, sex='2'}, User{name='刘六1', age=12, height=123.0, sex='2'}, User{name='孙七1', age=54, height=189.0, sex='1'}, User{name='郝八1', age=23, height=185.2, sex='1'}]
System.out.println(nameAdd1List);
//将list转换为map --{孙七=User{name='孙七', age=54, height=189.0, sex='1'}, 李四=User{name='李四', age=23, height=169.5, sex='2'}, 王五=User{name='王五', age=45, height=178.0, sex='2'}, 郝八=User{name='郝八', age=23, height=185.2, sex='1'}, 刘六=User{name='刘六', age=12, height=123.0, sex='2'}}
Map<String, User> userMap = users.stream().filter(a->!"张三".equals(a.getName())).collect(Collectors.toMap(User::getName, user -> user));
System.out.println(userMap);
//将list转换为map --{孙七=User{name='孙七', age=54, height=189.0, sex='1'}, 李四=User{name='李四', age=23, height=169.5, sex='2'}, 王五=User{name='王五', age=45, height=178.0, sex='2'}, 郝八=User{name='郝八', age=23, height=185.2, sex='1'}, 刘六=User{name='刘六', age=12, height=123.0, sex='2'}}
Map<String, User> userMap2 = users.stream().filter(a->!"张三".equals(a.getName())).collect(Collectors.toMap(User::getName, Function.identity()));
System.out.println(userMap2);
//如果key可能重复的话,需要指定处理方法 --{孙七=User{name='孙七', age=54, height=189.0, sex='1'}, 李四=User{name='李四', age=23, height=169.5, sex='2'}, 张三=User{name='张三', age=18, height=180.5, sex='2'}, 王五=User{name='王五', age=45, height=178.0, sex='2'}, 郝八=User{name='郝八', age=23, height=185.2, sex='1'}, 刘六=User{name='刘六', age=12, height=123.0, sex='2'}}
Map<String, User> distinctUserMap = users.stream().collect(Collectors.toMap(User::getName, Function.identity(), (k1, k2) -> k2));
Map<String, User> distinctUserMap2 = users.stream().collect(Collectors.toMap(User::getName, user->user, (k1, k2) -> k2));
System.out.println(distinctUserMap);
//控制map的类型,此处指定为LinkedHashMap --{张三=User{name='张三', age=18, height=180.5, sex='2'}, 李四=User{name='李四', age=23, height=169.5, sex='2'}, 王五=User{name='王五', age=45, height=178.0, sex='2'}, 刘六=User{name='刘六', age=12, height=123.0, sex='2'}, 孙七=User{name='孙七', age=54, height=189.0, sex='1'}, 郝八=User{name='郝八', age=23, height=185.2, sex='1'}}
Map<String, User> distinctUserMap3 = users.stream().collect(Collectors.toMap(User::getName, user->user, (k1, k2) -> k2, LinkedHashMap::new));
System.out.println(distinctUserMap3);
System.out.println(distinctUserMap3 instanceof LinkedHashMap); //true
System.out.println(distinctUserMap2 instanceof LinkedHashMap); //false
System.out.println(distinctUserMap2 instanceof HashMap); //true
}
static class User implements Cloneable{
private String name;
private int age;
private double height;
private String sex;
public User(){
}
public User(String name, int age, double height, String sex) {
this.name = name;
this.age = age;
this.height = height;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", height=" + height +
", sex='" + sex + '\'' +
'}';
}
@Override
protected Object clone() {
User user = null;
try {
user = (User)super.clone();
} catch (Exception e) {
e.printStackTrace();
}
return user;
}
}
}
java8特性-List.stream()的用法
于 2022-06-28 16:42:53 首次发布