我有两个map参数:Map
我正在寻找一种方法来编写一个计算它们的并集的函数。我的意思是,对于任何
X x
,如果它在map1
的域中,但不在map2
的域中,那么它的值将是map1.get(x)
。相反的情况相同。如果它在两者中,那么我想返回一个集合,它是map1.get(x)
和map2.get(x)
的交集。
假设我知道X是哪个类,可以使用以下代码完成此操作:
public Map<X,Set<Y>> unifyAndIntersect(Map<X,Set<Y>> map1, Map<X,Set<Y>> map2) {
Map<X,Set<Y>> combined = new HashMap();
combined.putAll(map1);
for(X x : map2.keySet()){
if(combined.contains(x)){
Set<Y> res = Sets.newSet();
res.addAll(map1.get(x));
res.retainAll(map2.get(x));
combined.put(x,res);
}
else{
combined.put(x,map2.get(x));
}
}
}
但是,我想使这个方法通用,从某种意义上说,它适用于任何
X
和Y
。我尝试过使用Object
,但从我的类类型转换为Object
时出错...
你能告诉我做这件事的正确方法吗?
为了声明泛型方法,需要提供泛型类型参数
别忘了钻石
您提供的代码中还有一个不一致之处:如果一个键存在于两个映射中,则会将一个新集作为值添加到结果映射中,但如果根据您的代码,该键仅包含在其中一个映射中,则会使用现有集。我最好为每个值生成一个新的集,以确保随后对结果图的值进行的修改不会影响map1和map2的状态。
public <X,Y> Map<X, Set<Y>> unifyAndIntersect(Map<X,Set<Y>> map1,
Map<X,Set<Y>> map2) {
Map<X, Set<Y>> combined = new HashMap<>();
for(Map.Entry<X, Set<Y>> entry: map1.entrySet()){
Set<Y> union = new HashSet<>(entry.getValue());
if (map2.containsKey(entry.getKey())) {
union.addAll(map2.get(entry.getKey()));
}
combined.put(entry.getKey(), union);
}
return combined;
}
可以使用流API实现相同的逻辑:
public <X,Y> Map<X, Set<Y>> unifyAndIntersect(Map<X,Set<Y>> map1,
Map<X,Set<Y>> map2) {
return map1.entrySet().stream()
.map(entry -> Map.entry(entry.getKey(),
Stream.of(entry.getValue(),
map2.get(entry.getKey()))
.filter(Objects::nonNull)
.flatMap(Set::stream)
.collect(Collectors.toSet())))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
}
问题内容: 我们创建了一些我们所有项目都将使用的库,该库将提供我们所有系统的基本功能(登录,某些管理等)。但是应用程序本身可以使用另一个数据库。 我们要做的是用两个持久性单元创建Persistence.xml。并将所有核心库实体打包在一个名为“ LN- model.jar”的jar中,并将所有测试应用程序的实体打包在“ App-model.jar”中。但是由于某种原因,我们仍然会收到以下消息。 无
下面我有两个箱子。 案例1和案例2之间的区别在于案例2具有在中,但案例1在中具有。 问题是关于案例2的输出:为什么包含两个不同的值,一个是,另一个是字符串“B”?
我需要一些帮助来替换HashMap中的值。HashMap包含每个键的多个值,这些值是从ArrayList中添加的。我想做的是替换键中的一个元素。例如,用户输入键1和索引2,这将是该键的值[1]=[A, B, C, D],索引2将是字母“C”,我想用“X”替换它,这样输出将是[1]=[A, B, X, D],这将在一个同时循环中。 输出: 1 张 AB 光盘 2 张 AB 光盘 3 张 AB 光盘
如何查询同时包含键值对“key1”-“value1”和“key2”-“value2”的文档?我似乎找不到关于这个的任何文件。 我尝试了下面的查询,但它没有返回任何结果,即使应该有匹配的文档。虽然用should替换must是可行的,但当我将minimum_should_match=100%时,它也不会返回任何结果。 这是映射的外观: 非常感谢你的帮助。
使用Tomcat 7.0.34、Primefaces 3.5和mojarra 2.1.25,我得到了以下文件“client.xhtml”: 文件client.inc(这是一个普通的xhtml,在几个xhtml文件中使用)如下:(简化) 和“客户端比林.inc”:(我在其他几个xhtml文件中使用) “clientBilling.inc”中的选项卡没有显示,但如果我将其从p:tabView上取下,就