Java 检查映射中的键,增加新的键值并添加回映射

Java 检查映射中的键,增加新的键值并添加回映射,java,maps,Java,Maps,我在LinkedHashMap中有如下条目: 整数值基于某种层次结构。有没有办法让我检查地图上3000或2000系列中的最后一把钥匙是什么,这样我的新钥匙就可以是那把钥匙的增量?例如,如果我需要在2000层次结构级别的行下创建一个新条目,并且最后一个键是2015,我如何检查此项并将新键增加到2016并添加到地图中 您可以存储最后一个键,并在添加新元素后将其递增,或者按以下方式查找: public int getLastKey(int series, LinkedHashMap map) {

我在LinkedHashMap中有如下条目:


整数值基于某种层次结构。有没有办法让我检查地图上3000或2000系列中的最后一把钥匙是什么,这样我的新钥匙就可以是那把钥匙的增量?例如,如果我需要在2000层次结构级别的行下创建一个新条目,并且最后一个键是2015,我如何检查此项并将新键增加到2016并添加到地图中

您可以存储最后一个键,并在添加新元素后将其递增,或者按以下方式查找:

public int getLastKey(int series, LinkedHashMap map) {
    for(int i = 0; i < 1000; i++) {
        if (map.get(series + i) == null) {
            return series + i;
}

LinkedHashMap的键集方法也可能有用。

您可以在键集上使用streams API,如下所示:

 //floor is the start of the series, ceiling is the start of the next one.
 public Optional<Integer> getLastInSeries(int floor, int ceiling, LinkedHashMap<Integer, String> linkedHashMap) {
        return linkedHashMap.keySet().stream()
                .filter(integer -> integer < ceiling && integer > floor)
                .max(Comparator.naturalOrder());
    }

这将返回一个可选值,因为您无法确定序列中是否已有值。

您可能希望省去麻烦,改用排序树映射。
 //floor is the start of the series, ceiling is the start of the next one.
 public Optional<Integer> getLastInSeries(int floor, int ceiling, LinkedHashMap<Integer, String> linkedHashMap) {
        return linkedHashMap.keySet().stream()
                .filter(integer -> integer < ceiling && integer > floor)
                .max(Comparator.naturalOrder());
    }