java – 检查不可变映射构建器中的值(列表)是否存在
发布时间:2020-12-15 04:35:22 所属栏目:Java 来源:网络整理
导读:我有一个像这样定义的地图: MapString,ListSomeClass map = new HashMap(); 我认为通过使用ImmutableMap.Builder构造使它成为不可变是很好的. 但在我的情况下,当在地图中放置新元素时,我需要首先检查它们的存在,如果给定键的列表不存在,则创建它并向其添加
我有一个像这样定义的地图:
Map<String,List<SomeClass>> map = new HashMap<>(); 我认为通过使用ImmutableMap.Builder构造使它成为不可变是很好的. for(final SomeClass elem : elements){ final String key = elem.getKey(); if(!map.containsKey(target)){ map.put(key,new LinkedList<SomeClass>()); } map.get(key).add(elem); } 如果map中有目标键,我需要创建分配给它的新列表,然后将元素添加到该列表中. 是否有任何方法可以使该映射不可变,而不使用不必要的代码,如更多循环首先初始化目标键的列表? 顺便说一句.我正在使用Java 7 解决方法
你应该在这里使用
ListMultimap .使用
ImmutableListMultimap.builder() :
ImmutableListMultimap.Builder<String,SomeClass> builder = ImmutableListMultimap.builder(); for (final SomeClass elem : elements) { final String key = elem.getKey(); builder.put(key,elem); } ImmutableListMultimap<String,SomeClass> multimap = builder.build(); 可是等等!有用于您的用例的内置方法 – ImmutableListMultimap<String,SomeClass> multimap = Multimaps.index( elements,new Function<SomeClass,String>() { @Override public String apply(final SomeClass element) { return element.getKey(); } }); (在Java 8中): ImmutableListMultimap<String,SomeClass> multimap = Multimaps.index(elements,SomeClass::getKey); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |