我已经为我的问题找到了一个可行的解决方案,但对我来说似乎有点太多代码所以也许你有更好的想法:)我有一个有限大小的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;
}
由于
答案 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());