【问题标题】:Setter for a key value pair List object键值对列表对象的设置器
【发布时间】:2014-12-05 00:32:10
【问题描述】:

我被这个难住了,希望看看这是否是解决我的问题的好方法。

我先解释一下程序是如何工作的。

我有一个简单的键值对类:

   public class KeyValuePair {
   private final String name;
   private final String value;

   public KeyValuePair(String n, String v) {
    name = n;
    value = v;
}

I have another class called List that uses the key value pair.

   public class myList {

private List<KeyValuePair> myList = new ArrayList<KeyValuePair>();


public myList(List<KeyValuePair> nvp) {
    List = nvp;
}

public List<KeyValuePair> getList() {
    return myList;
}
}

然后在我的程序中创建一个 List 对象并用键值对填充它并查看一个新的 List(kvp)。

 public myList pullData(){
 Final myList<KeyValuePair> nvp = new ArrayList<KeyValuePair>();
 List<String[]> results = getResults()

    for(String[] str : results)
    {
     KeyValuePair kvp = new KeyValuePair(str[0], str[1]);
     nvp.add(kvp)
    }
 }
 return new myList(nvp)
}

现在我遇到了需要更新每对值的情况。密钥保持不变。

最初我创建了一个 newList 对象并填充了密钥对的更新值,但后来虽然应该有更好的方法,也许在 List 对象中创建一个更新或一个 setter 方法来执行此操作。

创建新对象或更新哪个更好?我会考虑更新键值对中的值,但是,我不确定如何执行此操作。

任何帮助或建议将不胜感激。

【问题讨论】:

  • 改用Map&lt;String, String&gt;。如果单个键可以有多个值,请使用 Guava 中的 Map&lt;String, List&lt;String&gt;&gt;MultiMap&lt;String, String&gt;
  • 对于特定键只有一个值,但我只需将该值更新为不同的值。
  • 你会反对地图吗?
  • 您始终可以使用Map#put(oldKey, newValue),它比使用List&lt;CustomKeyValuePairClass&gt; 更快

标签: java list object keyvaluepair


【解决方案1】:

然后您可以根据需要设置键和值:

public class KeyValuePair {
  private String name;
  private String value;

  public KeyValuePair(String n, String v) {
      name = n;
     value = v;
  }
  public String getName(){
     return name;
  }
  public String getValue(){
     return value;
  }

  public void setName(String n){
     name = n;
  }

  public void setValue(String v){
      value = v;
  }

}

但是,这些列表永远不会像 Java 中已经存在的地图那样有用。

【讨论】:

  • 哈哈。我刚刚意识到我也可以这样做。由于某种原因,我脑子里放了个屁。
  • 出于某种原因,我查看的是我创建的 myList 类,而不是 KVP 类。
【解决方案2】:

去掉 final 修饰符并为你的字段创建漂亮的 getter 和 setter

public class KeyValuePair {
    private String name;
    private String value;

    public KeyValuePair(String n, String v) {
        name = n;
        value = v;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

}

然后你可以例如在您的值中添加加号:

public void update(List<KeyValuePair> pairs) {
        for (KeyValuePair kvp: pairs) {
            kvp.setValue(kvp.getValue() + "+");
        }
    }

【讨论】:

    【解决方案3】:

    只需向我的键值对类添加一个 setter 即可解决此问题。不太清楚为什么我以前没有看到,出于某种原因,我认为我需要在 myList 类中这样做。

    public void setValue (String newValue){
        value = newValue;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-10-21
      • 1970-01-01
      • 2013-08-27
      • 1970-01-01
      • 1970-01-01
      • 2018-12-06
      • 2014-10-03
      • 2014-06-04
      • 2019-06-19
      相关资源
      最近更新 更多