【问题标题】:How to transform Multimap<A,B> to Iterable<C>如何将 Multimap<A,B> 转换为 Iterable<C>
【发布时间】:2015-04-20 16:41:04
【问题描述】:

如何将Multimap&lt;A,B&gt; 转换为Iterable&lt;C&gt;,其中C(Iterable&lt;B&gt; iterableB)

例如。

Iterable&lt;String&gt; names = [“爱丽丝”、“安娜”、“本”、“克里斯”、“查理”]

Multimap&lt;Integer,String&gt; namesStartWith = { [1, ["Alice", "Anna"]], [2, ["Ben"]], [3,["Chris", "Charlie"]] }

对于每个Entry&lt;Integer , List&lt;String&gt;&gt; 转换为名称。

ImmutableListMultimap<Integer, String> example = Multimaps.index(newArrayList("Alice", "Anna", "Ben", "Chris", "Charlie"), new Function<String, Integer>() {
    @Override
    public Integer apply(String input) {
        return input.startsWith("A") ? 1 : input.startsWith("B") ? 2 : 3;
    }
});

List<Names> names = newArrayList();
for (Integer number : example.keys()) {
    names.add(new Names(number,example.get(number)));
}
return names;

private class Names {

    int startWith;
    List<String> names;

    public Names(int startWith, List<String> names) {
        this.startWith = startWith;
        this.names = names;
    }
}

有没有更简单的方法可以使用 Guava 做到这一点?

【问题讨论】:

  • 你能澄清一下这个问题吗?
  • @mota 这个问题非常模棱两可。请参考guidelines
  • 听起来你已经有了答案。没有一个明确更好的答案,尽管它可能有助于迭代 asMap().entrySet()

标签: guava


【解决方案1】:

您可以按如下方式遍历地图。

for(Integer key : map.keySet()) {
  for(String value : map.get(key)) {
  }
}

【讨论】:

    猜你喜欢
    • 2012-10-18
    • 2021-12-27
    • 2012-09-03
    • 2011-05-30
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    相关资源
    最近更新 更多