Java ArrayList:从包含 HashMap 的 ArrayList 中获取不同的值

Posted

技术标签:

【中文标题】Java ArrayList:从包含 HashMap 的 ArrayList 中获取不同的值【英文标题】:Java ArrayList: Get Distinct Values from ArrayList which contain HashMap 【发布时间】:2011-05-14 11:21:49 【问题描述】:

请参阅下面描述的问题定义。 我有包含 HashMap 的 ArrayList。在 HashMap 中存在一个或多个键值对。 ArrayList 包含以下内容:

HashMap1 包含 键:column1 值:0001 键:column2 值:1 键:column3 值:1

HashMap2 包含 键:column1 值:0001 键:column2 值:1 键:column3 值:2

HashMap1 和 HashMap2 都保存在 ArrayList 中。

现在我输入一个类似 (column1, column2) 的字符串 然后我需要像这样的输出 创建包含以下数据的新 ArrayList:

HashMap1 包含 键:column1 值:0001 键:column2 值:1

当我输入类似 (column1, column3) 的字符串时 创建包含以下数据的新 ArrayList:

HashMap1 包含 键:column1 值:0001 键:column3 值:1

HashMap2 包含 键:column1 值:0001 键:column3 值:2

即我想根据输入字符串从 ArrayList 中获取不同的值。 请在逻辑上帮助我,我怎样才能达到同样的效果。

【问题讨论】:

我已经重读了好几遍了,我仍然没有遵循... 【参考方案1】:

你能做的是;

for each map in the list.
  copy the map.
  map.keySet().retainAll(keys-you-want-to-keep)
  set-of-results.add(map)

这样你将拥有一组子地图。

【讨论】:

【参考方案2】:

没有什么比代码更严格的了。所以这里是做你想做的事。特别看一下 selectColumns 方法。地图列表存储在类字段list中。

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class Matrix 

    private List<Map<String, String>> list = new ArrayList<Map<String,String>>();

    public Matrix(int numRows) 
        for (int i = 0; i < numRows; i++) 
            list.add(new HashMap<String, String>());
        
    

    private void set(int row, String string, String string2) 
        list.get(row).put(string, string2);
    

    public Matrix selectColumns(String... columns) 
        Matrix select = new Matrix(list.size());
        for (String column : columns) 
            for (int row = 0; row < list.size(); row++) 
                select.set(row, column, list.get(row).get(column));
            
        
        return select;
    

    public static Matrix createDummy(int dim) 
        Matrix matrix = new Matrix(dim);
        for (int i = 0; i < dim; i++) 
            for (int j = 0; j < dim; j++) 
                matrix.set(i, "col" + j, "val:" + i + "|" + j);
            
        
        return matrix;
    

    public static void main(String[] args) 
        Matrix mainMatrix = Matrix.createDummy(3);
        System.out.println(mainMatrix.list);
        System.out.println(mainMatrix.selectColumns("col1", "col2").list);
    


【讨论】:

以上是关于Java ArrayList:从包含 HashMap 的 ArrayList 中获取不同的值的主要内容,如果未能解决你的问题,请参考以下文章

3.29面试

常用的几种java集合类总结

在 Java 中从 ArrayList 中删除对象

ArrayList与LinkedList区别

如何从java中的抽象类arraylist打印特定的对象类型

java的集合类(MapList与Set比较)