【问题标题】:How to get List value from map object如何从地图对象中获取列表值
【发布时间】:2014-08-07 00:03:44
【问题描述】:

我的哈希图中有一个名为“mastervalue”的对象值。主值包含 ques_id 作为键,数组包含分数和答案作为值。如何仅获取数组的值(分数和答案)并作为列表返回。

String maprule = "department == '2' && topic == '1'";

mastervalue = (Map<String, List<String>>) map_master.get(maprule);
System.out.println(mastervalue);

mastervalue 打印出来: {10359=[4, 1], 10365=[1, 1], 10364=[1, 1], 10363=[4, 1], 10362=[3, 1], 10369=[1, 1], 10368 =[5, 1]}

【问题讨论】:

  • 你想要所有值对象的列表吗?
  • 是的,我想获取对象中列表的值。
  • 还要注意 Map.values() 返回一个不可序列化的集合。下面流氓的回答很到位。

标签: java list hashmap


【解决方案1】:

好的:

public <T> List<T> getValues(Map<?, T> map) {
    return new ArrayList<>(map.values());
}

内联:

List<List<String>> list = new ArrayList<>(map_master.values());

或者使用方法:

List<List<String>> list = getValues(map_master);

或者,如果你想把所有列表的所有值合二为一,只需迭代:

List<String> total = new ArrayList<>();
for (List<String> lis : map_master.values()) {
    total.addAll(lis);
}

使用 Java 8 流:

List<String> total = map_master.values().stream()
                            .flatMap(Collection::stream)
                            .collect(Collectors.toList());

【讨论】:

    【解决方案2】:

    对于 Koltin 用户来说,方法如下:

    val listOfObjects = List<Object>?.stream()?.flatMap { obj: Collection<Object> -> obj.stream() }
                    ?.collect(Collectors.toList())
    

    通用方式:

    fun <T: Any> listList(list: List<List<KClass<T>>>) = list.stream().flatMap { obj: Collection<*> -> obj.stream() }.collect(Collectors.toList())
    

    【讨论】:

      【解决方案3】:

      对于 Kotlin,有一个捷径:

      map.values.flatten()
      

      正如文档所述:

      返回给定集合中所有集合的所有元素的单个列表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-08-17
        • 2011-05-10
        • 2020-08-29
        • 2019-05-08
        • 1970-01-01
        • 2022-06-22
        • 1970-01-01
        相关资源
        最近更新 更多