通过使用Pair类(例如javafx.util.Pair , ImmutablePair , MmutablePair (公共语言)和io.vavr.Tuple2类)来学习如何在Java中使用键值对。
1. Why we need pairs?
一对提供了一种将简单键值关联的便捷方法。 在Java中,地图用于存储键值对。 地图存储成对的集合并作为整体进行操作。
有时,我们需要根据键值对本身存在的要求进行工作。 例如一对需要在方法中作为参数传递
方法需要以一对形式返回两个值
2. javafx.util.Pair class
Pair类提供以下方法。boolean equals(Object o) -测试此对与另一个对象是否相等。
K getKey() –获取该对的密钥。
V getValue() –获取该对的值。
int hashCode() –为此对生成哈希码。
String toString() –此对的字符串表示形式。
让我们来看一个创建和使用pair的Java程序 。Pair pair = new Pair<>(100, "howtodoinjava.com");
Integer key = pair.getKey();//100
String value = pair.getValue();//howtodoinjava.com
pair.equals(new Pair<>(100, "howtodoinjava.com"));//true - same name and value
pair.equals(new Pair<>(222, "howtodoinjava.com"));//false- different name
pair.equals(new Pair<>(100, "example.com"));//false- different value
3. Pair, ImmutablePair and MutablePair – Apache commons lang
Pair类是由两个元素组成的对。
Pair将元素称为“左”和“右”。
Pair还实现了Map.Entry接口,其中键为“ left”,值为“ right”。
ImmutablePair是Pair上的immutable表示形式。 如果将易变的对象存储在该对中,那么该对本身将有效地变为易变的。 该类也不是final ,因此子类可能会添加不良行为。
如果存储的对象是线程thread-safe则ImmutablePair是thread-safe安全的。ImmutablePair pair = ImmutablePair.of(100, "howtodoinjava.com");
Integer key = pair.getKey();//100
String value = pair.getValue();//howtodoinjava.com
//Integer key = pair.getLeft();//100
//String value = pair.getRight();//howtodoinjava.com
pair.equals(ImmutablePair.of(100, "howtodoinjava.com"));//true - same name and value
pair.equals(ImmutablePair.of(222, "howtodoinjava.com"));//false- different name
pair.equals(ImmutablePair.of(100, "example.com"));//false- different value
不要忘记将库导入应用程序类路径。
org.apache.commons
commons-lang3
3.8.1
4. io.vavr.Tuple2 – Vavr
用于存储键值对的另一个有用的类是Tuple2 。
Tuple2提供了许多有用的方法来处理存储在其中的数据。 例如T1 _1() –此元组的第一个元素的吸气剂。
T2 _2() –此元组的第二个元素的Getter。
Tuple2 update1(T1 value) –将此元组的第一个元素设置为给定值。
元组2 Tuple2 update2(T2 value) –将此元组的第二个元素设置为给定值。
Map.Entry toEntry() –将元组转换为java.util.Map.Entry元组。
Tuple2 swap() –交换此Tuple的元素。
Tuple2 map(BiFunction mapper) –使用映射器功能映射此元组的组件。
int compareTo(Tuple2 that) –比较两个Tuple2实例。Tuple2 pair = new Tuple2<>(100, "howtodoinjava.com");
Integer key = pair._1();//100
String value = pair._2();//howtodoinjava.com
pair.equals(new Tuple2<>(100, "howtodoinjava.com"));//true - same name and value
pair.equals(new Tuple2<>(222, "howtodoinjava.com"));//false- different name
pair.equals(new Tuple2<>(100, "example.com"));//false- different value
不要忘记将库导入应用程序类路径。
io.vavr
vavr
0.10.2
请把有关在Java中使用名称/值对的问题交给我。