问题陈述: -
我有一张名为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)
;
}
答案 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)