哈希回调qu [已关闭]

问题描述 投票:0回答:2

我正在制作一个 Spring 应用程序,该应用程序将使用户能够在游戏等待大厅中等待。 (像队列一样)

所以我会有4个地区,美洲,非洲,欧盟和中东。

我正在考虑创建一个类似的地图,

UserId1 - Region1
UserId2 - Region2
UserId3 - Region2
UserId4 - Region4
UserId5 - Region3
java callback
2个回答
0
投票

您可能不需要回电。只需定义一个方法来检查 userId 是否已在地图中:

boolean addUser(String userId, Integer regionId) {
    if (hm.containsKey(userId)) return false; // Or throw an exception if you prefer

    hm.put(userId, regionId);
    return true;
}

对于后一部分,我不太明白你到底想检查什么。您想要检查是否有来自特定区域的用户,或者统计来自特定区域的所有用户,或者两者兼而有之?您可能需要一个单独的方法


0
投票

您可以为 put 方法编写自己的回调。 尽管它不是性能最好的解决方案,但这里是一个示例实现,当然您可以通过您希望可用的接口传递任何参数,例如键和值等。

public class Main {
    private interface ICallbackSomething<V> {
        void hahIWasOverwritingThisOriginalValue(V originalValueForSameId);
        void howOftenIsTheCountryContained(long amount);
    }
    //put this in an own file
    private class CallMeBackMap<K,V> extends HashMap<K,V> {
        public V customPut(K key, V value, ICallbackSomething<V> myCallback) {
            if (keySet().contains(key))
                myCallback.hahIWasOverwritingThisOriginalValue(get(key));
            if (values().contains(value))
                myCallback.howOftenIsTheCountryContained(values().stream().filter(val -> val.equals(value)).count());
            return super.put(key, value);
        }
    }
    public static void main(String[] args) {
        CallMeBackMap map = new CallMeBackMap<String, String>();
        ICallbackSomething iCallbackSomething = new ICallbackSomething() {
            @Override
            public void hahIWasOverwritingThisOriginalValue(Object originalValueForSameId) {
                System.out.println("Lol, i just was overwriting region " + originalValueForSameId);
                // your code goes here
            }
            @Override
            public void howOftenIsTheCountryContained(long amount) {
                System.out.println("Hah, ther is " + amount +  " living here.");
                // your other code goes here
            }
        };

        map.customPut("userId1", "Region1", iCallbackSomething);
        map.customPut("userId2", "Region2", iCallbackSomething);
        map.customPut("userId3", "Region2", iCallbackSomething);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.