一次性从Map中检索所有列及其数据

时间:2013-04-19 04:59:10

标签: java map

问题陈述: -

我有一张名为attributes的地图,该地图中会有column names及其corresponding values

假设我col1 to coln中有attributes map及其对应的值。

然后我将使用所有列名及其值编写我的代码 -

MutationBatch m = CassandraAstyanaxConnection.getInstance().getKeyspace().prepareMutationBatch();
 m.withRow(CassandraAstyanaxConnection.getInstance().getEmp_cf(), userId)
.putColumn("col1", value1, null)
.putColumn("col2", value2, null)
.
.
.
.putColumn("coln", valuen, null)
;

现在我需要在我的下面的方法中做同样的事情,它将有两个参数 -

userId and attributes

现在我不确定如何以这种方式编写上述代码,以便一次性检索所有列及其值。

以下是方法 -

    public void upsertAttributes(final String userId, final Map<String, String> attributes) {

        MutationBatch m = CassandraAstyanaxConnection.getInstance().getKeyspace().prepareMutationBatch();

        m.withRow(CassandraAstyanaxConnection.getInstance().getEmp_cf(), userId)
        .putColumn(attributeName from attributesMap, attributeValue from attributesMap, null)
        .putColumn(attributeName from attributesMap, attributeValue from attributesMap, null)   
        .putColumn(attributeName from attributesMap, attributeValue from attributesMap, null)
        .
        .
        .
        .putColumn(attributeName from attributesMap, attributeValue from attributesMap, null)
;

    }

2 个答案:

答案 0 :(得分:1)

我不确定我是否理解了你想要的东西,但似乎你只想循环遍历地图的条目:

MutationBatch m = 
    CassandraAstyanaxConnection.getInstance().getKeyspace().prepareMutationBatch();
ColumnListMutation<String> mutation = 
    m.withRow(CassandraAstyanaxConnection.getInstance().getEmp_cf(), userId);
for (Map.Entry<String, String> entry : attributes.entrySet()) {
    mutation = mutation.putColumn(entry.getKey(), entry.getValue(), null);
}

答案 1 :(得分:0)

  

现在我不知道如何以这样的方式编写上面的代码   一次性检索所有列及其值。

你做不到。相反,你会使用这样的循环:

import java.util.*;

class Row {

    String[] data = new String[10];
    int pos = 0;

    public Row putColumn(String x, String y) {
        data[pos++] = x;
        data[pos++] = y;

        return this;
    }

    public void show() {
        for (int i=0; i<data.length; ++i) {
            System.out.println(data[i]);
        }
    }

}

public class MyProg {
    public static void main(String[] args) {
        Map<String, String> attributes = new HashMap<String, String>();
        attributes.put("col1", "val1");
        attributes.put("col2", "val2");
        attributes.put("col3", "val3");
        attributes.put("col4", "val4");

        upsertAttributes(attributes);
    }

    public static void upsertAttributes(final Map<String, String> attributes) {
        Row r = new Row();
        Iterator<String> keyIterator = attributes.keySet().iterator();

        while (keyIterator.hasNext()) {
            String key = keyIterator.next();
            String val = attributes.get(key);
            r.putColumn(key, val);
        }

        r.show();
    }

}

--output:--
col4
val4
col1
val1
col3
val3
col2
val2
null
null

想象一下,如果您的地图有10,000,000个条目。你真的要打印出地图中的所有值,然后查看键和值,并写出10,000,000行代码,如下所示:

.putColumn('a key I see', 'its value', null)
.putColumn('another key I see', 'its value', null)
...
...
...
.putcolumn('key10,000,000', 'val10,000,000', null)