繁体   English   中英

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

[英]Java ArrayList: Get Distinct Values from ArrayList which contain HashMap

请按照以下说明查看问题定义。 我有包含HashMap的ArrayList。 在HashMap中,存在一个或多个键值对。 ArrayList包含以下内容:

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

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

HashMap1和HashMap2都保留在ArrayList中。

现在,我输入一个类似(column1,column2)的字符串,然后需要类似Create new ArrayList的输出,其中包含以下数据:

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

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

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

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

即我想根据输入字符串从ArrayList获得不同的值。 请从逻辑上帮助我,就像我该如何做到一样。

你可以做什么?

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

这样,您将拥有一组子映射。

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

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);
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM