Java 流(Stream)处理操作完成之后,我们可以收集这个流中的元素,使之汇聚成一个最终结果。这个结果可以是一个对象,也可以是一个集合,甚至可以是一个基本类型数据。
以记录 Record 为例:
- @Data
- @NoArgsConstructor
- @AllArgsConstructor
- public static class Record {
- private String col1;
- private String col2;
- private int col3;
- }
记录 Record 包含三个属性:列1(col1)、列2(col2)和 列3(col3)。
创建四个记录实例:
- Record r1 = new Record("a", "1", 1);
- Record r2 = new Record("a", "2", 2);
- Record r3 = new Record("b", "3", 3);
- Record r4 = new Record("c", "4", 4);
添加到列表:
- List<Record> records = new ArrayList<>();
-
- records.add(r1);
- records.add(r2);
- records.add(r3);
- records.add(r4);
收集所有记录的 列1 值,以列表形式存储结果
- List<String> col1List = records.stream()
- .map(Record::getCol1)
- .collect(Collectors.toList());
- log.info("col1List: {}", Json.toJson(col1List));
输出结果:
col1List: ["a","a","b","c"]
收集所有记录的 列1 值,且去重,以集合形式存储
- Set<String> col1Set = records.stream()
- .map(Record::getCol1)
- .collect(Collectors.toSet());
- log.info("col1Set: {}", Json.toJson(col1Set));
输出结果:
col1Set: ["a","b","c"]
收集记录的 列2 值和 列3 值的对应关系,以字典形式存储
- Map<String, Integer> col2Map = records.stream()
- .collect(Collectors.toMap(Record::getCol2, Record::getCol3