#java 8 stream流 flatmap 扁平化学习
代码如下:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = AppFreePlan.class)
public class FlatMapTest {
class DayData {
private String date;
private String value;
public DayData(String date, String value) {
this.date = date;
this.value = value;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
class MonthData {
List<DayData> dayDataList;
private String month;
public MonthData(List<DayData> dayDataList, String month) {
this.dayDataList = dayDataList;
this.month = month;
}
}
@Test
public void test() {
MonthData monthData1 = new MonthData(null, "2023-08");
DayData[] dayDataArray = new DayData[] {
new DayData("2023-08-01", "1"),
new DayData("2023-08-02", "2")
};
List<DayData> dayDataList = Arrays.asList(dayDataArray);
monthData1.dayDataList = Collections.unmodifiableList(dayDataList);
MonthData monthData2 = new MonthData(null, "2023-09");
DayData[] dayDataArray2 = new DayData[] {
new DayData("2023-09-01", "1"),
new DayData("2023-09-02", "2")
};
List<DayData> dayDataList2 = Arrays.asList(dayDataArray);
monthData2.dayDataList = Collections.unmodifiableList(dayDataList2);
List<MonthData> monthDataList = Arrays.asList(monthData1, monthData2);
// 使用flatMap将List<MonthData>转换为List<DayData>
List<DayData> dayDataList3 = monthDataList.stream()
.flatMap(monthData -> monthData.dayDataList.stream())
.collect(Collectors.toList());
}
}
更多使用方法
除了处理嵌套列表,flatMap 还可以用于其他类型的数据转换。例如,将一个流中的每个字符串拆分成单词,并将所有单词合并成一个流:
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class FlatMapExample {
public static void main(String[] args) {
List<String> sentences = Arrays.asList(
"Hello world",
"Java stream flatMap",
"flatMap example"
);
List<String> words = sentences.stream()
.flatMap(sentence -> Arrays.stream(sentence.split(" ")))
.collect(Collectors.toList());
System.out.println(words);
}
}
输出结果将是:[Hello, world, Java, stream, flatMap, flatMap, example]
总结:flatMap是解决嵌套列表的一个好方法