Java中的KeyValuePair

maa*_*ank 229 java key-value

我正在寻找Java中的KeyValuePair类.
由于java.util大量使用接口,因此没有提供具体实现,只有Map.Entry接口.

我可以导入一些规范的实现吗?这是我讨厌实施100倍的"管道工编程"课程之一.

Eya*_*der 232

文档AbstractMap.SimpleEntry是通用的,可能很有用.

  • ...或者AbstractMap.SimpleImmutableEntry,如果合适的话. (10认同)
  • 最好使用 AbstractMap.SimpleEntry / AbstractMap.SimpleImmutableEntry 作为您自己的特定于域的类的基础,以实现 OO。在最简单的情况下,它只是为类和两个元素赋予一个新名称。 (2认同)
  • 为了最佳实践,应该注意在大多数情况下应该使用`java.util.Map.Entry<K, V>` 来编程接口。所以你应该使用`List<Map.Entry<K, V>>`,例如,出于同样的原因,你不会在消费代码中使用`ArrayList<AbstractMap.SimpleEntry<K,V>>`。显然,实际_创建_实例的代码必须使用具体类。 (2认同)

kre*_*ker 98

Android程序员可以使用BasicNameValuePair

更新:

BasicNameValuePair现已弃用(API 22).改为使用Pair.

用法示例:

Pair<Integer, String> simplePair = new Pair<>(42, "Second");
Integer first = simplePair.first; // 42
String second = simplePair.second; // "Second"
Run Code Online (Sandbox Code Playgroud)

  • 实际上对于Android用户来说,一个不错的选择是[android.util.Pair](http://developer.android.com/reference/android/util/Pair.html). (33认同)
  • 这不仅适用于Android程序员,也适用于任何java程序. (7认同)
  • @ doctor-oreo是的,任何java程序员都可以从[hc.apache.org](http://hc.apache.org/)下载jar但是android有**内置** (4认同)
  • 这不是普遍可用的语言功能,需要的不仅仅是标准的 JRE 运行时。`Pair` 来自 javafx.util,它引入了对 JavaFX 的依赖,例如 OracleJDK、OpenJDK 或 OpenJFX。如果您正在使用这些 Java 运行时之一,那就太好了,但是没有简单的方法可以将它添加到具有 Maven 或 Gradle 依赖项的 JRE 安装中。 (2认同)

rem*_*pod 42

Commons Lang的Pair类可能有所帮助:

Pair<String, String> keyValue = new ImmutablePair("key", "value");
Run Code Online (Sandbox Code Playgroud)

当然,你需要包含commons-lang.

  • 网址不时变化.我用Google搜索了对Commons Lang"并找到了它.我删除了链接以防止进一步的downvotes :-( (5认同)
  • `android.util.Pair` (2认同)
  • 从 1.6 开始就有 `java.util.AbstractMap.SimpleEntry` - 这使得公共对变得多余。 (2认同)
  • 我更喜欢公共配对 - 似乎没有必要在AbstractMap中挖掘一个类.但如果你不想出于某种原因依赖公共场所,我可以看到. (2认同)

Aar*_*son 13

对于可以实例化的任何两种类型的大多数简单键值配对,使用javafx.util.Pair就足够了.

Pair<Integer, String> myPair = new Pair<>(7, "Seven");
Integer key = myPair.getKey();
String value = myPair.getValue();
Run Code Online (Sandbox Code Playgroud)

  • 它在服务器JDK(无头)或Java 1.9中不可用. (3认同)
  • 这也适用于Android(支持库). (2认同)

Neo*_*ist 9

import java.util.Map;

public class KeyValue<K, V> implements Map.Entry<K, V>
{
    private K key;
    private V value;

    public KeyValue(K key, V value)
    {
        this.key = key;
        this.value = value;
    }

    public K getKey()
    {
        return this.key;
    }

    public V getValue()
    {
        return this.value;
    }

    public K setKey(K key)
    {
        return this.key = key;
    }

    public V setValue(V value)
    {
        return this.value = value;
    }
}
Run Code Online (Sandbox Code Playgroud)


Nat*_*ner 8

我喜欢用

特性

例子:

Properties props = new Properties();

props.setProperty("displayName", "Jim Wilson"); // (key, value)

String name = props.getProperty("displayName"); // => Jim Wilson

String acctNum = props.getProperty("accountNumber"); // => null

String nextPosition = props.getProperty("position", "1"); // => 1
Run Code Online (Sandbox Code Playgroud)

如果您熟悉哈希表,您就会对此非常熟悉


Moh*_*bil 5

您可以轻松创建自定义 KeyValuePair 类

public class Key<K, V>{

    K key;
    V value;

    public Key() {

    }

    public Key(K key, V  value) {
        this.key = key;
        this.value = value;
    }

    public void setValue(V value) {
        this.value = value;
    }
    public V getValue() {
        return value;
    }

    public void setKey(K key) {
        this.key = key;
    }
    public K getKey() {
        return key;
    }

}
Run Code Online (Sandbox Code Playgroud)