事情进展顺利,直到我试图将我的数据结构记录到控制台,此时我被这个丑陋的野兽打招呼:
OpcodeCount.java:115: error: cannot find symbol
for (Map.Entry<String, Integer> entry : map.entrySet()) {
^
symbol: method entrySet()
location: variable map of type Entry<String,Integer>
1 error
我正在使用的数据,它看起来像(或多或少),如下所示:
group 1: makePush
group 2:
group 3: 2722
group 1: makePush
group 2:
group 3: 495
group 1: makePush
group 2:
group 3: 495
group 1: opAdd
group 2:
group 3: 10756
group 1: opAdd
group 2:
group 3: 361
但是,这对我的目的来说还不够,我需要它看起来更像这样,基本上是一个元组列表:
{
<makePush, 2722>,
<makePush, 495>,
<makePush, 495>,
<opAdd, 10756>,
<opAdd, 361>
}
在尝试了不同的Maps,ArrayLists,Pairs等变体后,我终于确定了这个结构:
final static class MyEntry<K, V> implements Map.Entry<K, V> {
private final K key;
private V value;
public MyEntry(K key, V value) {
this.key = key;
this.value = value;
}
@Override
public K getKey() {
return key;
}
@Override
public V getValue() {
return value;
}
@Override
public V setValue(V value) {
V old = this.value;
this.value = value;
return old;
}
}
它在代码中实例化:
// output data struct
ArrayList<Entry<String,Integer>> pairList= new ArrayList<>();
如此填充:
//Entry<String,Integer> pair1 = new SimpleEntry<>(groupOne, groupThree);
Map.Entry<String, Integer> pair1 = new MyEntry<String, Integer>(groupOne, Integer.valueOf(groupThree));
//Entry<String,Integer> pair1=new Entry<>(groupOne, groupThree);
pairList.add(pair1);
现在,一切都在顺利进行,直到我不得不打印,这就是我试图打印的方式:
Iterator<Map.Entry<String, Integer>> it = pairList.iterator();
while (it.hasNext()) {
Map.Entry<String, Integer> map = it.next(); //so here you don't need a potentially unsafe cast
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + " = " + entry.getValue());
}
}
再次出现错误,我遇到了这个错误:
OpcodeCount.java:115: error: cannot find symbol
for (Map.Entry<String, Integer> entry : map.entrySet()) {
^
symbol: method entrySet()
location: variable map of type Entry<String,Integer>
1 error
我应该尝试将entrySet()
作为自定义类的一部分来实现吗?怎么做?
是否可以通过其他方式打印数据?如果是这样的话?
如果你有兴趣,完整的代码是here - 无可否认,它只是一个原型。
答案 0 :(得分:1)
您已将map
正确声明为Map.Entry
。正如您在实施Map.Entry
界面时所看到的那样,它没有entrySet()
方法。这是在Map
上定义的,但只是命名您的条目map
并不会在该对象上授予Map
界面,并且它无论如何都不相关。
无需致电entrySet()
;您的pairList
实际上是条目集。重复一遍:
List<Map.Entry<String,Integer>> pairList = new ArrayList<>();
pairList.add(new AbstractMap.SimpleEntry<>("x", 0));
...
pairList.forEach(System.out::println);