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()实际上我两个都试过了,而且都能用。我只是不确定什么是更好的实施方案,或者是否有其他合适的实施方案。谢谢@jawsh什么的列表?如果有多个族通过过滤器,则生成的贴图将是它们的合并。你需要一个相当于findAny()
的选择吗?@saka1029很好。添加limit(1)
相当于findAny
Hi谢谢您的回答。我还有一个问题,如果我想返回一个列表而不是一个映射,并用这个值做一些变通。我应该做.flatMap(.stream()).map().collect()吗
或.flatMap(.stream().map()).collect()实际上我两个都试过了,而且都能用。我只是不确定什么是更好的实施方案,或者是否有其他合适的实施方案。谢谢@列一张什么的清单?