用flatMap摆脱双层for循环,可用于遍历元素set场景
package Test;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @description:
* @author: yq
* @time: 2022/3/13 8:17
*/
public class StreamTest {
private static List<Developer> developers;
private static List<Record> records;
static {
Developer developer1 = new Developer("11", "111", "ww", 10);
Developer developer2 = new Developer("22", "222", "qq", 20);
Developer developer3 = new Developer("33", "333", "ee", 30);
Developer developer4 = new Developer("44", "444", "rr", 40);
Record record1 = new Record("1", "ww", "原因");
Record record2 = new Record("2", "qq", "原因");
Record record3 = new Record("3", "rr", "原因");
Record record4 = new Record("4", "ee", "原因");
developers = new ArrayList<>();
developers.add(developer1);
developers.add(developer2);
developers.add(developer3);
developers.add(developer4);
records = new ArrayList<>();
records.add(record1);
records.add(record2);
records.add(record3);
records.add(record4);
}
public static void main(String[] args) {
List<Developer> developerList = developers.stream().filter(ele -> ele.getAge() >= 20).flatMap(ele -> {
return records.stream()
.filter(record -> ele.getUserId().equals(record.getRelationId()))
.map(record -> {
ele.setRecord(record);
return ele;
});
}).collect(Collectors.toList());
developerList.forEach(System.out::println);
}
static class Developer {
private String id;
private String name;
private String userId;
private Record record;
private Integer age;
public Developer() {
}
public Developer(String id, String name, String userId, Integer age) {
this.id = id;
this.name = name;
this.userId = userId;
this.age = age;
}
@Override
public String toString() {
return "Developer{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", userId='" + userId + '\'' +
", record=" + record +
", age=" + age +
'}';
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Record getRecord() {
return record;
}
public void setRecord(Record record) {
this.record = record;
}
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 getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
}
static class Record {
private String id;
private String relationId;
private String reason;
public Record(String id, String relationId, String reason) {
this.id = id;
this.relationId = relationId;
this.reason = reason;
}
public Record() {
}
@Override
public String toString() {
return "Record{" +
"id='" + id + '\'' +
", relationId='" + relationId + '\'' +
", reason='" + reason + '\'' +
'}';
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getRelationId() {
return relationId;
}
public void setRelationId(String relationId) {
this.relationId = relationId;
}
public String getReason() {
return reason;
}
public void setReason(String reason) {
this.reason = reason;
}
}
}