目录
为了更好理解Java8流式编程,我们可以先创建一个user对象。
static class User {
private Integer id;
private String name;
public User(Integer id, String name) {
this.id = id;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
一、for循环
创建一个userList, 使用.forEach来替代for循环, 代码一下会简洁很多。
userList.forEach(user -> System.out.println(user.getId()));
二、filter 过滤满足条件
使用.stream().filter()方法来筛选出满足条件的对象,最终返回的筛选过后的列表。
如下只获取到集合中用户id>2的所有用户:
Stream<User> satisfy = userList.stream().filter(user -> user.getId() > 2);
System.out.println("满足条件用户列表:" + satisfy.collect(Collectors.toList()));
三、map()方法
可以用.map 获取到遍历对象的所有属性值,拿到属性值后,我们可以重新将属性赋值到一个对象或基本类型的对象里,一般结合collect()方法来使用。
比如现在有一个User对象列表,我们只需要所有对象的id,应该怎么做?
List<Integer> users = userList.stream().map(User::getId).collect(Collectors.toList());
System.out.println("用户id列表:" + users);
在.map()方法里使用User::getId来获取User对象的id值。
四、Collect()方法
1. toList()和toSet()
toList()和toSet()方法都是将map后的stream转换为一个列表对象,toSet()会去重重复的对象, 需要.map()方法将列表中的对象属性给映射出来。
// toList用法
List<Integer> list = userList.stream().map(User::getId).collect(Collectors.toList());
System.out.println("用户列表为: " + list);
2. toMap()
toMap() 是将stream直接转换为一个map, 不需要.ma()方法支持。
// toMap 用法
Map<Integer, String> map = userList.stream().collect(Collectors.toMap(User::getId, User::getName));
System.out.println("用户map为: " + map);
五、例子完整代码
package stream;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @Desc:
* @Author: bingbing
* @Date: 2022/4/26 0026 18:18
*/
public class StreamApplication {
static class User {
private Integer id;
private String name;
public User(Integer id, String name) {
this.id = id;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
public static void main(String[] args) {
List<User> userList = Arrays.asList(
new User(1, "a"),
new User(2, "b"),
new User(3, "c"),
new User(4, "d"));
// for 循环
userList.forEach(user -> System.out.println(user.getId()));
// filter
Stream<User> satisfy = userList.stream().filter(user -> user.getId() > 2);
System.out.println("满足条件用户列表:" + satisfy.collect(Collectors.toList()));
// map 用法
List<Integer> users = userList.stream().map(User::getId).collect(Collectors.toList());
System.out.println("用户id列表:" + users);
// toList用法
List<Integer> list = userList.stream().map(User::getId).collect(Collectors.toList());
System.out.println("用户列表为: " + list);
// toMap 用法
Map<Integer, String> map = userList.stream().collect(Collectors.toMap(User::getId, User::getName));
System.out.println("用户map为: " + map);
}
}
打印结果: