序
本文简单介绍下计算集合对称差的几种方法。
maven
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>22.0</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-collections4</artifactId> <version>4.1</version> </dependency>
对称差
两个集合的对称差是只属于其中一个集合,而不属于另一个集合的元素组成的集合。
集合A和B的对称差通常表示为AΔB,对称差的符号在有些图论书籍中也使用符号⊕来表示。例如:集合{1,2,3}和{3,4}的对称差为{1,2,4}。
guava
在guava里头是用symmetricDifference方法
Set<Integer> a = new HashSet<>(Arrays.asList(1, 2, 3, 4)); Set<Integer> b = new HashSet<>(Arrays.asList(3, 4, 5, 6)); Sets.SetView<Integer> result = Sets.symmetricDifference(a,b); System.out.println(result);
collection4
在collection4里头是用disjunction方法
Set<Integer> a = new HashSet<>(Arrays.asList(1, 2, 5)); Set<Integer> b = new HashSet<>(Arrays.asList(1, 2, 3)); SetUtils.SetView<Integer> result = SetUtils.disjunction(a, b); assertTrue(result.toSet().contains(5) && result.toSet().contains(3));
改进
上述的两个方法都不能标注哪些元素属于第一个集合,哪个属于第二个集合,有时候我们又想获取对称差的时候顺便能够计算出哪个元素属于哪个集合,这个时候怎么办呢,可以模仿collection4中的方法来获取:
public static <O> Pair<Collection<O>,Collection<O>> disjunction2(final Collection<? extends O> first, final Collection<? extends O> second, final Predicate<O> p) { final List<O> firstList = first.stream() .filter(e -> p.evaluate(e)) .collect(Collectors.toList()); final List<O> secondList = second.stream() .filter(e -> !firstList.remove(e)) .collect(Collectors.toList()); return Pair.of(firstList,secondList); }
final List<String> first = Arrays.asList("bbb", "ccc","dddd","aaa"); final List<String> second = Arrays.asList("aaa", "zzz", "ccc"); System.out.println(disjunction(first,second,TruePredicate.truePredicate()));
输出
([bbb, dddd],[zzz])
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍分享javascript计算时间差的示例代码,包括了分享javascript计算时间差的示例代码的使用技巧和注意事项,需要的朋友参考一下 在实际应用中,需要计算两个时间点之间的差距,一般来说都是计算当前时间和一个指定时间点之间的差距,并且有时候需要精确到天、小时、分钟和秒,下面就简单介绍一下如何实现此效果。 效果图: 距离新年: 代码如下: 以上代码实现了我们想要的功能,下面简单介绍
我正在处理两组包含我创建的复杂java对象的数据。假设包含的元素是People.java类型的,它有一个字符串名称和一个int age。假设我有这些集: Set2=[{Arthur,18},{James,25}] 我试图得到set1和set2之间的不对称差,所以这个差的结果是{Anne,22}。我尝试过将元素存储在hashset中并使用set1。移除所有(set2),但答案等于set1。需要注意的
本文向大家介绍java集合中list的用法代码示例,包括了java集合中list的用法代码示例的使用技巧和注意事项,需要的朋友参考一下 List接口是Collection接口的子接口,List有一个重要的实现类--ArrayList类,List中的元素是有序排列的而且可重复,所以被称为是序列。 List可以精确的控制每个元素的插入位置,或删除某个位置元素,它的实现类ArrayList底层是由数组实
问题内容: 我需要一些易于实现的单个cpu和内存密集型计算,可以用Java为测试线程调度程序编写这些计算。 它们应该花费一些时间,但是更重要的是消耗资源。 有任何想法吗? 问题答案: CPU密集型任务的一些简单示例: 搜索质数(涉及许多BigInteger部门) 计算大阶乘,例如2000!((涉及许多BigInteger乘法) 许多Math.tan()计算(这很有趣,因为Math.tan是本机的,
本文向大家介绍Java 数组差集实例代码,包括了Java 数组差集实例代码的使用技巧和注意事项,需要的朋友参考一下 以下实例演示了如何使用 removeAll () 方法来计算两个数组的差集: Main.java 文件: 以上代码运行输出结果为: array1 的元素[common1, common2, notcommon2] array2 的元素[common1, common2, notcom
本文向大家介绍JS实现的集合去重,交集,并集,差集功能示例,包括了JS实现的集合去重,交集,并集,差集功能示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS实现的集合去重,交集,并集,差集功能。分享给大家供大家参考,具体如下: 1. js 实现数组的集合运算 为了方便测试我们这里使用nodejs,代码如set_operation.js 2. 测试 我们这里使用nodejs来测试 测试