首页 > 解决方案 > 他们是我的要求的任何替代方法而不是迭代器

问题描述

我有一张地图HashMap<sId, List<Bannas>>,其中sId列表的许多 Id 都相似,而且我也有一个方法 getListbySId(在 sId 中)。通过使用这种方法,我可以获得基于 sId 的具有相似值的值列表。现在我必须从基于 sId 的值列表中删除一个值,然后可以通过迭代过程来比较值列表的 id。如果匹配,我将删除它。除了这种方法,任何人都可以说另一种方法来删除值或获取值而不改变要求。我无法提供代码请帮助我。

标签: javalistcollectionshashmapiterator

解决方案


如果要从List<Bannas>匹配对象的某些id字段Bannas(可能是sId或另一个 id)中删除某些值,可以使用Collection::removeIf方法:

 //

public static void removeValuesById(HashMap<String, List<Bannas>> map, String sId, String anotherId) {
    map.getOrDefault(sId, Collections.emptyList())
       .removeIf(banna -> banna.getId().equals(anotherId));
}

更新
另一个不依赖于实现的Collections.emptyList解决方案应该处理键sId不在地图中的情况:

public static void removeValuesById(HashMap<String, List<Bannas>> map, String sId, String anotherId) {
    Optional.ofNullable(map.get(sId))
            .ifPresent(list -> 
                list.removeIf(banna -> banna.getId().equals(anotherId))
    );      
}

推荐阅读