Java不是曾经有过一个Fair类吗?Map.Entry

2022-08-31 08:38:50

我是否记错了,或者Java曾经提供过一个Fair类作为其API的一部分?


答案 1

标准框架中没有 Pair,但是非常接近“标准”的Apache Commons Lang有一个Fair

new MutablePair<>(1, "xxx");
new ImmutablePair<>(1, "xxx");

答案 2

Map.Entry

Java 1.6 及更高版本有两个 Map.Entry 接口实现,将键与值配对:

UML diagram of SimpleEntry & SimpleImmutableEntry classes inheriting from Map.Entry interface

例如

Map.Entry < Month, Boolean > pair = 
    new AbstractMap.SimpleImmutableEntry <>( 
        Month.AUGUST , 
        Boolean.TRUE 
    )
;

pair.toString(): AUGUST=true

我在需要存储对(如大小和对象集合)时使用它。

这部分来自我的生产代码:

public Map<L1Risk, Map.Entry<int[], Map<L2Risk, Map.Entry<int[], Map<L3Risk, List<Event>>>>>>
        getEventTable(RiskClassifier classifier) {
    Map<L1Risk, Map.Entry<int[], Map<L2Risk, Map.Entry<int[], Map<L3Risk, List<Event>>>>>> l1s = new HashMap<>();
    Map<L2Risk, Map.Entry<int[], Map<L3Risk, List<Event>>>> l2s = new HashMap<>();
    Map<L3Risk, List<Event>> l3s = new HashMap<>();
    List<Event> events = new ArrayList<>();
    ...
    map.put(l3s, events);
    map.put(l2s, new AbstractMap.SimpleImmutableEntry<>(l3Size, l3s));
    map.put(l1s, new AbstractMap.SimpleImmutableEntry<>(l2Size, l2s));
}

代码看起来很复杂,但不是Map.Entry,你被限制为对象数组(大小为2)并丢失类型检查...


推荐