总结一些Java中常用Stream流的常用方法,后续会慢慢更新!
一、实体类
- 简单创建实体类。
/**
1. 实体
*/
@EntityScan
public class User implements Serializable {
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
public void setId(Integer s, String username, String password) {
this.id = s;
this.username = username;
this.password = password;
}
}
- 新建实体,添加数据,方便以下进行练习。
//实体类
User user = new User();
User user2 = new User();
User user3 = new User();
User user4 = new User();
user.setId(123, "name1", "pwd1");
user2.setId(213, "name2", "pdw2");
user3.setId(321, "name3", "pwd3");
user4.setId(312, "name4", "pwd4");
ArrayList<User> list = new ArrayList<User>();
list.add(user);
list.add(user2);
list.add(user3);
list.add(user4);
System.out.println("================================================");
二、list- stream简单使用
为方便,后续输出会使用Consumer进行简单输出。
public static int count = 3;
private static Consumer<User> userConsumer = userList -> System.out.println(userList);
- limit、sort
Limit方法可以对流进行截取,只取用前n个,Stream limit(long maxSize)参数是一个long类型,如果集合当前长度大于参数则进行操作,反之则不进行操作,也不报错,limit方法是一个延迟方法,只是对流中的元素进行截取,返回的是一个新流,所以可以继续调用其他流中的方法。
Sort方法可以根据自己要求进行字段排序。
//list进行行数选择--根据任意字段进行排序
list.stream().limit(count).sorted(
(a, b) -> {
//可以设置排序条件
if (a.getUsername().equals(b.getUsername())) {
return b.getId() - a.getId();
} else {
return a.getId() - b.getId();
}
}
).forEach(userConsumer);
System.out.println("================================================");
运行结果
- 数组去重
//数组去重
list.stream().collect(
collectingAndThen(
toCollection(() -> new TreeSet<>(Comparator.comparing(User::getId))), ArrayList::new
)
).forEach(userConsumer);
System.out.println("================================================");
- 过滤器
filter可以过滤一个List对象,查找符合条件的对象集合。
//list过滤器--过滤姓名包含数字2
list.stream().filter(user1 -> !user1.getUsername().contains("2"))
.collect(Collectors.toList())
.stream().limit(count)
.forEach(userConsumer);
System.out.println("================================================");
运行结果
三、map- stream简单使用
- list转为map,并根据其中某个字段作为key和value
/**
* list to hashmap
* 1。list转为map(值替换 - 1-key 2-value 3- newValue)
*/
Map<String, User> map = list.stream().collect(
Collectors.toMap(
User::getUsername, //key
Function.identity(), //value
(oldValue, newValue) -> newValue) //将新的值替换原来的旧值;
);
map.forEach((a, b) -> System.out.println(a + ":" + b));
运行结果