java - 不可变键 - Java 中的固定长度映射

标签 java collections immutability

Java 有没有办法创建一个固定大小和长度的集合( map )? 即,我想用 K 个常量键(例如字符串)初始化它,但仍然希望能够更改值。

编辑: 测试用例有固定数量的对象,每个对象对应一个数字(float)。每次应用程序中发生特定事件时,我想将集合中的所有数字相乘,但与“导致”事件的对象相对应的数字除外。 该数字在逻辑上不是对象的属性。

最佳答案

我建议您首先查看 Mike's answer 以了解如何着手解决这个问题,然后对他提供的代码进行一些更改以使其适用于您的情况:

import java.util.HashMap;

public class InstrumentedHashMap<K> extends HashMap<K, Float> {

    private static final long serialVersionUID = 1L;
    private int MAX;

    public InstrumentedHashMap(int capacity) {
        super();
        MAX = capacity;
    }

    @Override
    public Float put(K key, Float value) {
        if (super.size() >= MAX && !super.containsKey(key)) {
            return null;
        } else {
            super.put(key, value);
            return value;
        }
    }

    public void event(K trigger, int multiplyAmount, float subtractAmount) {
        super.entrySet().stream().forEach(e -> {
            if (!e.getKey().equals(trigger))
                e.setValue(e.getValue() * multiplyAmount);
            else
                e.setValue(e.getValue() - subtractAmount);
        });
    }
}

您可以使用 InstrumentedHashMap#event 方法来处理您的“特定事件”,multiplyAmount 参数是您要与 float 相乘的值。

关于java - 不可变键 - Java 中的固定长度映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52153504/

相关文章:

java - 用 iText 替换纯文本

java - Scala 字节数组类型不匹配错误

java - 在java中迭代之前删除元素列表

java - 在Java中增加ArrayList中ArrayList的大小

rust - 如何减少可变范围

java - 无法在Java中使用正则表达式进行匹配

java - 如何按字母顺序排序(没有 Comparable 或 Comparator 接口(interface))

java - 树状图奇怪的行为

java - 在 GWT 中序列化不可变类

functional-programming - 高效的不可变 map 实现?