Java:通过HashMap <t,integer =“”>以特殊顺序搜索值

时间:2016-04-04 16:12:46

标签: java hashmap

我已经为我的问题找到了一个可行的解决方案,但对我来说似乎有点太多代码所以也许你有更好的想法:)我有一个有限大小的1000个元素的HashMap。当我想再放1个时,地图中相关最小的整数的T应该换成新的。

我现在的代码是:

public boolean add(T element) {
    if (set.containsKey(element)) {
        return false;
    } else if (set.size() == length) {
        Integer searchedInteger = set.values().stream().sorted().findFirst().get();
        T searchedElement = set.entrySet()
                .stream()
                .filter(x -> x.getValue().equals(searchedInteger))
                .findFirst()
                .get()
                .getKey();
        set.remove(searchedElement);
        set.put(element, 0);
        return true;
    }
    set.put(element, 0);
    return true;
}

由于

1 个答案:

答案 0 :(得分:2)

您可以做的第一项改进是避免sorted().findFirst()Stream的大多数实现在这种情况下对所有元素进行排序,因此它是无效的。使用min代替它会好得多。

此外,无需重复两次条目。你可以这样做

Map.Entry<T, Integer> e = set.entrySet()
                             .stream()                                      
                             .min(Map.Entry.comparingByValue())
                             .orElseThrow(IllegalStateException::new);
set.remove(e.getKey());