如果映射包含键值上的匹配元素,如何迭代字符串映射列表并添加到另一个列表



我有一个地图列表<字符串,字符串>我想迭代并在字符串的映射中找到公共元素,然后添加到另一个映射中。

我很困惑if循环中应该包含哪些内容才能获得预期的输出。我正在寻找比较器类型的调用,但在任何地方都找不到。

for (int i = 0; i < list.size() - 1; i++) {
if (list.get(i).get("Journal ID").equals(list.get(i+1).get("Journal ID")))
// ???
}
}

我用这个方法对地图列表进行排序。我期待着像这样的

public Comparator<Map<String, String>> mapComparator = new Comparator<>() {
public int compare(Map<String, String> m1, Map<String, String> m2) {
return m1.get("Journal ID").compareTo(m2.get("Journal ID"));
}
}
Collections.sort(list, mapComparator);

//输入和预期输出我的列表=[{期刊ID=123,featureID=312},{期刊ID123,feature ID=313},featureID=314},{期刊ID=123,featureID=1255}]期望的输出是与"输出"相匹配的输出;期刊ID";[{期刊ID=123、特征ID=312},{期刊ID=123,featureID=313},{期刊ID:123,feature ID=1255}]。

一种方法是构造第二个映射,该映射将聚合所有映射。它将反映所有地图中的所有键。As value将是带有计数器的每个键值的列表。执行也可以得到加强,但主要方面是如何进行。有了聚合映射,就可以直接转换所需的结构。

public class TestEqMap {
public static void main(String[] args) 
{
Map<String, String> m1 = Map.of("a","a1","b","b1");
Map<String, String> m2 = Map.of("a","a1","b","b2");
Map<String, String> m3 = Map.of("a","a2","b","b2");
Map<String, String> m4 = Map.of("a","a1","b","b2");
Map<String, String> m5 = Map.of("a","a3","b","b2");
AggMap amap = new AggMap();
amap.addMap(m1);
amap.addMap(m2);
amap.addMap(m3);
amap.addMap(m4);
amap.addMap(m5);

amap.map.forEach((k,v)->System.out.println("key="+k+"n"+v));
}
static class AggMap
{
public Map<String, ListItem> map = new HashMap<String,ListItem>();
public void addMap(Map<String,String> m)
{
for(String key: m.keySet())
{
if(this.map.containsKey(key))
{
this.map.get(key).addItem(m.get(key));
}
else
{
ListItem li = new ListItem();
li.addItem(m.get(key));
this.map.put(key, li);
}
}
}

}
static class ListItem
{
public List<Item> li = new ArrayList<Item>();
public ListItem() {};
public void addItem(String str)
{
for(Item i: this.li)
{
if(i.val.equals(str))
{
i.count++;
return;
}   
}
this.li.add(new Item(str));

}
public String toString()
{
StringBuffer sb= new StringBuffer();
this.li.forEach(i->sb.append(i+"n"));
return sb.toString();
}
}
static class Item
{
public String val;
public int count=1;

public Item(String val)
{
this.val = val;
}

public String toString()
{
return "val="+this.val+" count="+this.count;
}
}
}

输出:

key=a
val=a1 count=3
val=a2 count=1
val=a3 count=1
key=b
val=b1 count=1
val=b2 count=4

最新更新