Java流-组合过滤器和收集 ColumnFamily column=tokens.getColumnFamilies().stream() .filter(族->族.getName().equals(“此族”)) .findAny() .get(); 映射标记化=column.getColumns().stream() .collect(collector.toMap)( 列::getQualifier, 列::getValue ));

Java流-组合过滤器和收集 ColumnFamily column=tokens.getColumnFamilies().stream() .filter(族->族.getName().equals(“此族”)) .findAny() .get(); 映射标记化=column.getColumns().stream() .collect(collector.toMap)( 列::getQualifier, 列::getValue ));,java,lambda,java-8,java-stream,collectors,Java,Lambda,Java 8,Java Stream,Collectors,有没有办法把这两条流合并成一条?我使用第一个流在嵌套列表中进行过滤和查找,并使用第二个流根据流的结果创建一个映射。我想知道是否有一种方法可以用一个流来实现这一点 像这样的 ColumnFamily column = tokens.getColumnFamilies().stream() .filter(family -> family.getName().equals("this_family")) .findAny() .get(); Map

有没有办法把这两条流合并成一条?我使用第一个流在嵌套列表中进行过滤和查找,并使用第二个流根据流的结果创建一个映射。我想知道是否有一种方法可以用一个流来实现这一点

像这样的

ColumnFamily column = tokens.getColumnFamilies().stream()
    .filter(family -> family.getName().equals("this_family"))
    .findAny()
    .get();

Map<String, String> tokenized = column.getColumns().stream()
    .collect(Collectors.toMap(
        Column::getQualifier,
        Column::getValue
    ));
Map tokenized=tokens.getColumnFamilies().stream()
.filter(族->族.getName().equals(“此族”))
.collect(collector.toMap)(
//
));

您可以使用
flatMap
获取嵌套的
并展平结构:

Map<String, String> tokenized = tokens.getColumnFamilies().stream()
    .filter(family -> family.getName().equals("this_family"))
    .collect(Collectors.toMap(
        //
    ));
Map tokenized=tokens.getColumnFamilies().stream()
.filter(族->族.getName().equals(“此族”))
.limit(1)//相当于findAny
.flatMap(cf->cf.getColumns().stream())
.collect(collector.toMap)(
列::getQualifier,
列::getValue
));

您可以使用
flatMap
获取嵌套的
并展平结构:

Map<String, String> tokenized = tokens.getColumnFamilies().stream()
    .filter(family -> family.getName().equals("this_family"))
    .collect(Collectors.toMap(
        //
    ));
Map tokenized=tokens.getColumnFamilies().stream()
.filter(族->族.getName().equals(“此族”))
.limit(1)//相当于findAny
.flatMap(cf->cf.getColumns().stream())
.collect(collector.toMap)(
列::getQualifier,
列::getValue
));
使用
可选的#map()
并组合

Map<String, String> tokenized = tokens.getColumnFamilies().stream()
    .filter(family -> family.getName().equals("this_family"))
    .limit(1)  // equivalent of findAny
    .flatMap(cf -> cf.getColumns().stream())
    .collect(Collectors.toMap(
        Column::getQualifier,
        Column::getValue
    ));
Map tokenized=tokens.getColumnFamilies().stream()
.filter(族->族.getName().equals(“此族”))
.findAny()
.map(cf->cf.getColumns().stream()).get()
.collect(Collectors.toMap(Column::getQualifier,Column::getValue));
使用
可选的#map()
并组合

Map<String, String> tokenized = tokens.getColumnFamilies().stream()
    .filter(family -> family.getName().equals("this_family"))
    .limit(1)  // equivalent of findAny
    .flatMap(cf -> cf.getColumns().stream())
    .collect(Collectors.toMap(
        Column::getQualifier,
        Column::getValue
    ));
Map tokenized=tokens.getColumnFamilies().stream()
.filter(族->族.getName().equals(“此族”))
.findAny()
.map(cf->cf.getColumns().stream()).get()
.collect(Collectors.toMap(Column::getQualifier,Column::getValue));

如果有多个族通过过滤器,则生成的贴图将是它们的合并。你需要一个相当于
findAny()
的选择吗?@saka1029很好。添加
limit(1)
相当于
findAny
Hi谢谢您的回答。我还有一个问题,如果我想返回一个列表而不是一个映射,并用这个值做一些变通。我应该做
.flatMap(.stream()).map().collect()吗
.flatMap(.stream().map()).collect()findAny()
的选择吗?@saka1029很好。添加
limit(1)
相当于
findAny
Hi谢谢您的回答。我还有一个问题,如果我想返回一个列表而不是一个映射,并用这个值做一些变通。我应该做
.flatMap(.stream()).map().collect()吗
.flatMap(.stream().map()).collect()