0

问题陈述:-

我有一张名为的地图attributes,它将在该地图中具有column names和它的名称corresponding values

假设我有col1 to colninattributes 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)
;

    }
4

2 回答 2

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);
}
于 2013-04-19T05:23:49.440 回答
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 个条目。你真的要打印出map中的所有值,然后查看键和值,写出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)
于 2013-04-19T06:05:12.577 回答