如何从lambda表达式返回新的非抽象Map?

时间:2017-08-09 22:32:04

标签: java lambda java-8

你们可以帮助我如何获得结果List<Map<Long, MapDifference>而不是List<AbstractMap.SimpleEntry<Long, MapDifference>>吗?

输入是列表。对象具有id和两个不同的List对象 - 左和右。我想比较它们并将其与id相关联。然后返回id为

的整个MapDifferences列表

我有以下代码:

List<AbstractMap.SimpleEntry<Long, MapDifference>> mapDifferences = input
        .stream()
        .map(h -> {
            Optional<Map<String, List<String>>> left = Optional.ofNullable(..Object1.);
            Optional<Map<String, List<String>>> right = Optional.ofNullable(..Object2..);
            MapDifference mapDifference = Maps.difference(left.orElseGet(LinkedTreeMap::new), right.orElseGet(LinkedTreeMap::new));
            return new AbstractMap.SimpleEntry<Long, MapDifference>((long) h.get("property"), mapDifference);
        })
        .collect(Collectors.toList());

1 个答案:

答案 0 :(得分:1)

据我所知,你需要Map提供Silvio。下面的代码返回映射哪些键是输入id,相应的值是此输入左右列表之间的差异。我跳过了计算差异。

class Example {
    static class Input {
        Long id;
    }

    static class MapDifference {
    }

    public static void main(String[] args) {
        Stream.of(new Input(), new Input())
              .collect(Collectors.toMap(
                  input -> input.id,
                  input -> {
                      // calculate difference
                      return new MapDifference();
                  }
              ));
    }
}