如何根据 ArrayListMultiMap 值的大小将键添加到列表中?
How can I add keys to a list based on the size of the value of an ArrayListMultiMap?
我有一个像这样的 ArrayListMultimap
ArrayListMultimap<Long, String> multiMap = ArrayListMultimap.create();
multiMap.put(100L,"test1");
multiMap.put(750L,"test0");
multiMap.put(50L, "test2");
multiMap.put(500L, "test3");
multiMap.put(200L, "test45");
multiMap.put(200L, "test000");
multiMap.put(60L, "test48");
这给了我 {50=[test2], 100=[test1], 500=[test3], 200=[test45, test000], 60=[test48], 750=[test0]}
。
我想将所有键添加到列表中,但需要根据值列表的大小添加具有多个值的键。例如,在上面的示例中,我希望将 200
添加到列表中两次,因为它的值的大小为 2。我尝试使用 ArrayList<Long> keyList = pathSizeMap.keySet()
但这只给了我键。
我怎样才能最好地使用 Java 8 个流来实现这一点?
请注意,keySet()
具体表示 Set(在没有重复条目的集合中)。这就是为什么您会得到每个密钥的一个副本。
不使用 keySet()
而是流式传输 条目 并获取每个条目的密钥:
List<Long> list = multiMap.entries().stream().map(Entry::getKey).collect(Collectors.toList());
System.out.println(list)
输出:
[100, 200, 200, 750, 50, 500, 60]
我知道您指定了流,但您实际上并不需要使用它们。
请注意 Multimap
有一个 keys()
方法。这不会折叠重复项(与 keySet()
方法不同)。它 returns 一个 Multiset
(又名包)。
代码如下:
Multiset<Long> keys = multiMap.keys();
如果你想要一个列表(但听起来 Multiset
适合你的需要):
List<Long> list = ImmutableList.copyOf(keys); // or new ArrayList<>(keys);
// [100, 200, 200, 750, 50, 500, 60]
System.out.println(list);
我有一个像这样的 ArrayListMultimap
ArrayListMultimap<Long, String> multiMap = ArrayListMultimap.create();
multiMap.put(100L,"test1");
multiMap.put(750L,"test0");
multiMap.put(50L, "test2");
multiMap.put(500L, "test3");
multiMap.put(200L, "test45");
multiMap.put(200L, "test000");
multiMap.put(60L, "test48");
这给了我 {50=[test2], 100=[test1], 500=[test3], 200=[test45, test000], 60=[test48], 750=[test0]}
。
我想将所有键添加到列表中,但需要根据值列表的大小添加具有多个值的键。例如,在上面的示例中,我希望将 200
添加到列表中两次,因为它的值的大小为 2。我尝试使用 ArrayList<Long> keyList = pathSizeMap.keySet()
但这只给了我键。
我怎样才能最好地使用 Java 8 个流来实现这一点?
请注意,keySet()
具体表示 Set(在没有重复条目的集合中)。这就是为什么您会得到每个密钥的一个副本。
不使用 keySet()
而是流式传输 条目 并获取每个条目的密钥:
List<Long> list = multiMap.entries().stream().map(Entry::getKey).collect(Collectors.toList());
System.out.println(list)
输出:
[100, 200, 200, 750, 50, 500, 60]
我知道您指定了流,但您实际上并不需要使用它们。
请注意 Multimap
有一个 keys()
方法。这不会折叠重复项(与 keySet()
方法不同)。它 returns 一个 Multiset
(又名包)。
代码如下:
Multiset<Long> keys = multiMap.keys();
如果你想要一个列表(但听起来 Multiset
适合你的需要):
List<Long> list = ImmutableList.copyOf(keys); // or new ArrayList<>(keys);
// [100, 200, 200, 750, 50, 500, 60]
System.out.println(list);