流<地图<字符串,字符串>&GT;在java 8中设置<string>值

时间:2016-05-26 08:55:53

标签: java java-8 java-stream

我有一个Map流,我怎么能得到具有Map值的Set?

在这里,我已经部分地完成了

Set<String> jcfTargetTables = measure.getConditionMap().values()
        .stream()
        .map(Condition::getJoinConditionFilter)
        .filter(jcf -> jcf!=null)
        .map(JoinConditionFilter::getTableMapping);

最后一行给了我一个Stream<Map<String,String>>,我如何继续获取Set是Map的值?

2 个答案:

答案 0 :(得分:6)

由于您在上一次映射中有地图,所以剩下的就是将它转换为这些地图中的值流,然后将它们收集为一组:

Set<String> jcfTargetTables = measure.getConditionMap().values()
    .stream()
    .map(Condition::getJoinConditionFilter)
    .filter(jcf -> jcf!=null)
    .map(JoinConditionFilter::getTableMapping)
    .flatMap(map -> map.values().stream()).collect(Collectors.toSet());;

答案 1 :(得分:3)

我不确定您目前所拥有的所有步骤是否都是必要的,但在您拥有的基础上,您可以使用flatMap获取Stream所有值:

Set<String> jcfTargetTables = measure.getConditionMap().values()
    .stream()
    .map(Condition::getJoinConditionFilter)
    .filter(jcf -> jcf!=null)
    .map(JoinConditionFilter::getTableMapping)
    .flatMap(m->m.values().stream())
    .collect(Collectors.toSet());