使用key = String和value = ArrayList <double> </double>创建一个映射

时间:2014-08-24 00:10:15

标签: java arraylist

我想在Java类中创建一个Map,其中键为String,值为ArrayList<Double>。我的要求是,如果String等于某个值,我可以快速拿起相应的列表。所有列表都是同一类中的私有变量。 有人可以告诉我以下代码中哪里出错了?

我收到了编译错误:

error: <identifier> expected METRICS_LIST_MAP.put("CPUUtilization", CPUUtilizationList);

我的代码:

private  ArrayList<Double> CPUUtilizationList;
private  ArrayList<Double> DiskReadOpsList;
private  ArrayList<Double> DiskWriteOpsList;
private  ArrayList<Double> DiskReadBytesList;
private  ArrayList<Double> DiskWriteBytesList;
private  ArrayList<Double> NetworkInList;
private  ArrayList<Double> NetworkOutList;

Map<String, ArrayList<Double>> METRICS_LIST_MAP = new HashMap<String, ArrayList<Double>>();
METRICS_LIST_MAP.put("CPUUtilization", CPUUtilizationList);
METRICS_LIST_MAP.put("DiskReadOps", DiskReadOpsList);
METRICS_LIST_MAP.put("DiskWriteOps", DiskWriteOpsList);
METRICS_LIST_MAP.put("DiskReadBytes", DiskReadBytesList);
METRICS_LIST_MAP.put("DiskWriteBytes", DiskWriteBytesList);
METRICS_LIST_MAP.put("NetworkIn", NetworkInList); 
METRICS_LIST_MAP.put("NetworkOut", NetworkOutList); 

谢谢!

1 个答案:

答案 0 :(得分:3)

您班上的代码在哪里?它位于所有构造函数和方法之外吗?如果是这样,你不能调用put(...)方法,而只能声明或声明和初始化变量和常量。此外,始终发布完整的错误消息。你的可能会遗漏重要的陈述。因此,请务必在方法或构造函数块中调用put(...)方法调用。

您似乎也将空值传递到地图中,因为您似乎尚未初始化任何列表。要知道你没有将变量传递给Map而是传递对象,所以如果没有为变量分配一个可行的对象,那么将它们传递到地图中什么都不做。 / p>

如,

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class Foo {
   // initialize all your lists first
   private ArrayList<Double> cPUUtilizationList = new ArrayList<>();
   private ArrayList<Double> diskReadOpsList = new ArrayList<>();
   private ArrayList<Double> diskWriteOpsList = new ArrayList<>();
   private ArrayList<Double> diskReadBytesList = new ArrayList<>();
   private ArrayList<Double> diskWriteBytesList = new ArrayList<>();
   private ArrayList<Double> networkInList = new ArrayList<>();
   private ArrayList<Double> networkOutList = new ArrayList<>();

   private Map<String, ArrayList<Double>> metricsListMap = new HashMap<String, ArrayList<Double>>();

   public Foo() {
      // insert into Map in constructor or method
      metricsListMap.put("CPUUtilization", cPUUtilizationList);
      metricsListMap.put("diskReadOps", diskReadOpsList);
      metricsListMap.put("diskWriteOps", diskWriteOpsList);
      metricsListMap.put("diskReadBytes", diskReadBytesList);
      metricsListMap.put("diskWriteBytes", diskWriteBytesList);
      metricsListMap.put("networkIn", networkInList);
      metricsListMap.put("networkOut", networkOutList);
   }
}

另外,您需要学习并使用Java naming conventions。变量名都应以较低的字母开头,而类名以大写字母开头。

遵循这些建议以及遵循良好的代码格式化实践将允许其他人(例如我们!)更好地理解您的代码,更重要的是,将允许您未来的自我更好地理解您在6个月前的想法你写了代码。