【问题标题】:How can I use guava's MultiMap to split list of values如何使用番石榴的 MultiMap 拆分值列表
【发布时间】:2017-12-27 11:52:24
【问题描述】:

地图的类型为Map<String, List<MyClass>> 我有 100 多个与 Key 关联的 MyClass 对象。 如果超过100,我需要拆分它。

例如 输入是

Map<String, List<MyClass>> myMap = new HashMap<String, List<MyClass>>();

myMap.put("ABC", [CustomObject1,CustomObject2,CustomObject3....CustomObject100...CustomObject110]);

& 输出应该是

myMap.put("ABC", [CustomObject1,CustomObject2,CustomObject3....CustomObject100]);
myMap.put("ABC", [CustomObject100,CustomObject101....CustomObject110]);

我想获取 myMap.containsKey(string) 并检查列表的大小,然后创建新条目或将其添加到相同的条目中。 我尝试使用番石榴的多图,但是当我尝试获取元素时它返回 Collection> 所以不知道如何插入它。或者是否有更好的选择?

【问题讨论】:

  • 元素的顺序重要吗?这就是 Guava MultiMap 返回的 Collection 给您带来问题的原因吗?
  • 排序并不重要。集合是 json 文件,我试图将其转换为 Map> 但 List 的大小受到限制。
  • 所以一旦“ABC”列表达到其最大大小 100,您想创建一个替换现有列表的新列表吗?或者您希望“ABC”键引用 2 个单独的列表?
  • "ABC" 键来引用 2 个单独的列表。
  • 是否可以为所有 MyClass 对象创建一个“ABC”映射,然后将它们分成 100 个块?

标签: java guava


【解决方案1】:

尝试使用 Guava Lists.partition

Map<String, List<MyClass>> myMap = new HashMap<String, List<MyClass>>();

myMap.put("ABC", [CustomObject1,CustomObject2,CustomObject3....CustomObject100...CustomObject110]);

Map<String, List<List<MyClass>>> output = myMap.entrySet().stream().collect(Collectors.toMap(e -> e.getKey(), e -> Lists.partition(e.getValue(), 100)));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多