对 'LinkedHashMap.get' 的可疑呼叫

Suspicious call to 'LinkedHashMap.get'

您好,我有以下代码

public static LinkedHashMap<Object, String[]> dataMap = new LinkedHashMap<>();

public static void parseDataset(int line){
  String[] dataArr = dataMap.get(dataMap.keySet().toArray()[line]);
}

由于我用作键的对象是动态生成的,我对此一无所知,所以我必须先找到它,然后才能使用它来获取它的值。

此代码向我发出警告 对 'LinkedHashMap.get' 的可疑调用,这是一个问题吗?我该如何消除警告?

您不需要使用 get:不要将键转换为数组,而是使用 values()。这是有效的,因为 values() 以与相应的 keys():

相同的顺序迭代
String[] dataArr = (String[]) dataMap.values().toArray()[line];

但是您也不需要使用 toArray(),它会浪费地分配一个包含所有值的数组,而您只需要一个值:您可以遍历这些值来获得您想要的东西:

static String[] nthItem(int n) {
  int i = 0;
  for (String[] value : dataMap.values()) {
    if (i == n) return value;
    ++i;
  }
  throw new ArrayIndexOutOfBoundsException();
}

或:

String[] dataArr = dataMap.values().stream().skip(line).findFirst().orElseThrow();

(这类事情的现有实现可以在 commonly-used 库中找到,例如 Guava's Iterables.get