繁体   English   中英

遍历地图并将其值放入Java中

[英]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.

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