Java流-合并两个流

时间:2020-09-09 06:22:25

标签: java java-8 java-stream collectors

有没有办法将这两个流合并为一个?

这是第一流

Map<String, String> rawMapping = tokens.getColumnFamilies().stream()
            .filter(family -> family.getName().equals("first_family"))
            .findAny()
            .map(columns -> columns.getColumns().stream()).get()
            .collect(Collectors.toMap(
                Column::getPrefix,
                Column::getValue
            ));

第二流

List<Token> tokenValues = tokens.getColumnFamilies().stream()
            .filter(family -> family.getName().equals("second_family"))
            .findAny()
            .map(columns -> columns.getColumns().stream()).get()
            .map(token -> {
                return Token.builder()
                    .qualifier(token.getPrefix())
                    .raw(rawMapping.get(token.getPrefix()))
                    .token(token.getValue())
                    .build();
            })
            .collect(Collectors.toList());

基本上代币是一个具有两列族的列表,我的目标是创建一个列表,该列表将基于两列族的限定符 。第一流将第一列族存储到映射中。第二个流遍历第二个族,并使用限定符通过地图获取值并将其存储到新列表中。

1 个答案:

答案 0 :(得分:0)

您可以使用双重过滤,然后稍后可以使用平面地图来获取列表:

Map<String, String> tokenvalues =    tokens.getColumnFamilies().stream()
          .filter(family -> family.getName().equals("first_family"))
           .filter(family -> family.getName().equals("second_family"))
          .map(columns -> columns.getColumns().stream())
       //etc..
.stream()
      .flatMap(Collection::stream)
      .collect(Collectors.toList()));

您可以内联重新制作流

https://www.baeldung.com/java-difference-map-and-flatmap