[英]Iterating over a map and putting its values in java
我已经创建了基于谷歌番石榴表的数据结构,如下所示
final Table<String, String, List<String>> values = HashBasedTable.create();
values.put("ton bon", "currency", Lists.newArrayList("ccdd", "rode1", "cwey", "Certy"));
values.put("ton bon", "racy", Lists.newArrayList("wqadd", "werde", "ihtr", "ytre"));
以下是我迭代此集合的方式
Map<String, List<String>> fmap = new HashMap<String, List<String>>();
List<String> validColumnKeys = Arrays.asList("ccdd", "rode1", "cwey", "Certy");
Map<String, List<String>> row = values.row("ton bon");
for (String columnKey : validColumnKeys) {
fmap.put(columnKey, row.get(columnKey));
}
现在,我想以某种方式修改我的条件,如果行键包含ton bon的值,列键包含这些值"ccdd","rode1","cwey","Certy"
则它将填充地图命名为fmap
,如下所示,第二个条件也类似。
我想要的地图:
Key Value
ccdd currency
rode1 currency
cwey currency
Certy currency
wqadd racy
werde racy
ihtr racy
ytre racy
但不幸的是,我尝试过的代码无法正常工作。 请告知发生了什么问题以及如何克服这一问题。
它应该是列和行的循环内部循环
final Table<String, String, List<String>> values = HashBasedTable.create();
values.put("ton bon", "currency", Lists.newArrayList("ccdd","rode1","cwey","Certy"));
values.put("ton bon", "racy", Lists.newArrayList("wqadd","werde","ihtr","ytre"));
Map<String, List<String>> row = values.row("ton bon");
Map<String, String> fmap = new HashMap<String, String>();
System.out.println("Key\tValue");
for(String columnKey:row.keySet()) {
List<String> rowValues = row.get(columnKey);
for(String rowValue:rowValues) {
System.out.println(rowValue + "\t" + columnKey);
fmap.put(rowValue, columnKey);
}
}
将打印
Key Value
wqadd racy
werde racy
ihtr racy
ytre racy
ccdd currency
rode1 currency
cwey currency
Certy currency
值可以存储在fmap.put(rowValue,columnKey); .....注意:此处的键应该是唯一的
优化方法是
final Table<String, String, List<String>> values = HashBasedTable.create();
values.put("ton bon", "currency", Lists.newArrayList("ccdd","rode1","cwey","Certy"));
values.put("ton bon", "racy", Lists.newArrayList("wqadd","werde","ihtr","ytre"));
Collection<Map<String,List<String>>> obj = Collections2.transform(Collections2.filter(Arrays.asList(new String[]{"ton bon"}), Predicates.in(values.rowMap().keySet()) ), Functions.forMap(values.rowMap()));
System.out.println("Key\tValue");
for(Map<String,List<String>> item: obj){
for(String key: item.keySet()){
List<String> items = item.get(key);
for(String value: items){
System.out.println(value + "\t" + key);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.