guava常用集合交集,差集,并集,补集操作
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>21.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -android结尾兼容jdk1.7 -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>22.0-android</version>
</dependency>
<!-- https://mvnrepository.com/artifact/net.sourceforge.javacsv/javacsv -->
<dependency>
<groupId>net.sourceforge.javacsv</groupId>
<artifactId>javacsv</artifactId>
<version>2.0</version>
</dependency>
引用guava jar文件
import com.csvreader.CsvReader;
import com.google.common.collect.Sets;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import java.io.IOException;
import java.nio.charset.Charset;
import java.util.*; import static com.google.common.collect.Sets.newHashSet; /**
* @Author: SimonHu
* @Date: 2019/11/12 14:35
* @Description:
*/
public class BillCompareUtil {
private static final Logger log = LoggerFactory.getLogger(BillCompareUtil.class); public static void main(String[] args) {
String csvFilePath02 = "C:\\Users\\admin\\Desktop\\app订单0905-02.csv";
String csvFilePath01 = "C:\\Users\\admin\\Desktop\\app订单0905.csv";
compare(csvFilePath01, csvFilePath02, 3);
} /**
* @param path1
* @param path2
* @param type 1交集2差集3并集
* @return java.util.Map
* @Description:对比文档 运行出错,请注意使用jdk1.8以上进行编译
* @Author:SimonHu
* @Date: 2019/11/12 14:44
*/
public static Map compare(String path1, String path2, int type) {
ArrayList<String[]> csvList01 = new ArrayList<String[]>();
ArrayList<String[]> csvList02 = new ArrayList<String[]>();
try {
long start = System.currentTimeMillis();
Set<Map<String, String>> set1 = newHashSet();
Set<Map<String, String>> set2 = newHashSet();
//解决中文编码
CsvReader reader01 = new CsvReader(path1, ',', Charset.forName("GBK"));
CsvReader reader02 = new CsvReader(path2, ',', Charset.forName("GBK"));
//reader.readHeaders(); // 跳过表头 如果需要表头的话,不要写这句。
//逐行读入除表头的数据
while (reader01.readRecord()) {
csvList01.add(reader01.getValues());
}
//逐行读入除表头的数据
while (reader02.readRecord()) {
csvList02.add(reader02.getValues());
}
reader01.close();
reader02.close();
for (int row = 0; row < csvList01.size(); row++) {
Map<String, String> map01 = new HashMap();
String cell0 = csvList01.get(row)[0];
String cell1 = csvList01.get(row)[1];
map01.put("订单号", cell0);
if (cell1.indexOf(".") == -1) {
map01.put("金额", cell1);
} else {
String cell2 = cell1.substring(0, cell1.indexOf("."));
map01.put("金额", cell2);
}
set1.add(map01);
}
for (int row = 0; row < csvList02.size(); row++) {
Map<String, String> map02 = new HashMap();
String cell0 = csvList02.get(row)[0];
String cell1 = csvList02.get(row)[1];
if (cell1.indexOf(".") == -1) {
map02.put("订单号", cell0);
map02.put("金额", cell1);
} else {
String s01 = cell1.substring(0, cell1.indexOf("."));
map02.put("订单号", cell0);
map02.put("金额", s01);
}
set2.add(map02);
}
Map map = new HashMap();
List<Map> resultList = new LinkedList<>();
Sets.SetView result = null;
if (type == 1) {
result = Sets.intersection(set1, set2);
System.out.println("交集 intersection:");
//intersection交集:
} else if (type == 2) {
result = Sets.difference(set1, set2);
System.out.println("补集 difference:");
//difference 补集:这里其实是set2相对于set1的补集
} else if (type == 3) {
result = Sets.union(set1, set2);
System.out.println("并集 union:");
}else if(type == 4){
//差集
result = Sets.symmetricDifference(set1,set2)
}
int i=0;
for (Object u : result) {
i++;
Map paramMap = new HashMap();
System.out.println(u.toString());
paramMap.put("text","序号:"+i+"------"+u.toString());
resultList.add(paramMap);
}
Map countMap = new HashMap();
countMap.put("text","总计:"+i+" 条");
resultList.add(0,countMap);
map.put("list", resultList);
long end = System.currentTimeMillis();
System.out.println((end - start) + "==========ms");
return map;
} catch (IOException e) {
log.error("文件对比失败------", e);
return null;
}
}
}
csv源文件
app订单0905-02.csv
"201992307383892601","490000.00"
"201950907854593602","490000.00"
app订单0905.cdv
"201992307383892601","490001.00"
"201950907854593602","490000.00"
对比结果
交集 intersection:
{orderNo=201950907854593602, trxAmt=490000}
补集 difference:
{orderNo=201992307383892601, trxAmt=490001}
并集 union:
{orderNo=201992307383892601, trxAmt=490001}
{orderNo=201950907854593602, trxAmt=490000}
{orderNo=201992307383892601, trxAmt=490000}
差集 symmetricDifference:
{orderNo=201950907854593602, trxAmt=4901}
{orderNo=201992307383892601, trxAmt=4900}
{orderNo=201950907854593602, trxAmt=4902}
lib引用jar

guava常用集合交集,差集,并集,补集操作的更多相关文章
- python-->(set /dict)交集 差集 并集 补集(功能用来做交差并补的)
# ### 集合 作用:交集 差集 并集 补集(功能用来做交差并补的) '''特征:自动去重 无序''' #定义一个空集合 setvar = set() #set()强制转换成一个空集合的数据类型 p ...
- js取两个数组的交集|差集|并集|补集|去重示例代码
http://www.jb51.net/article/40385.htm 代码如下: /** * each是一个集合迭代函数,它接受一个函数作为参数和一组可选的参数 * 这个迭代函数依次将集合的每一 ...
- C# List 集合 交集、并集、差集、去重, 对象集合、 对象、引用类型、交并差补、List<T>
关键词:C# List 集合 交集.并集.差集.去重, 对象集合. 对象.引用类型.交并差.List<T> 有时候看官网文档是最高效的学习方式! 一.简单集合 Intersect 交集, ...
- C# 集合的交集 差集 并集 去重
C# 集合的交集 差集 并集 去重 两个对象list,直接比较是不行的,因为他们存的地址不一样 需要重写GetHashCode()与Equals(object obj)方法告诉电脑 class Stu ...
- NET 集合交集、并集、差集操作
, , , , , , , }; , , , , , , , , }; // List1:1 3 5 7 9 11 13 15 Console.WriteLine("List1:" ...
- 【python】集合 list差集|并集|交集
两个list差集 list(set(b).difference(set(a))) # b中有而a中没有的 示例: a=[1,2,3] b=[2,3] list(set(a).difference(se ...
- C# 数组比较--取得两个集合的交集,差集,并集的方法
方法关键字: 交集:Intersect 差集:Except 并集:Union 使用代码: , , , , }; , , , , }; var 交集 = arr1.Intersect(arr2).ToL ...
- java数组并集/交集/差集(补集)
1.说明 使用java容器类的性质选择容器 2.实现 package com.wish.datastrustudy; import java.util.HashSet; import java.uti ...
- grep和map计算两个集合交集、并集、补集
#!/usr/bin/perl use strict; ######################################## 用grep 和map 获取两个列表的交集并集.补集###### ...
随机推荐
- WIN10升级失败,故障代码 0X8007042B-0X4000D 解决
个人博客链接:WIN10升级失败,故障代码 0X8007042B-0X4000D 解决
- bat实现监控进程守护程序-保证平台服务的稳定执行
背景是平台所在的服务器经常因异常原因导致当前机器所在的服务关闭....直接贴代码吧. ********************************************************* ...
- CritterAI 翻译 Configuration Parameters
翻译自: http://www.critterai.org/projects/nmgen_study/config.html 参考: http://blog.csdn.net/kun1234567/a ...
- div上中下布局中间自适应
需求1: 头尾固定高度,中间自适应 1.上部(header)Div高度固定100px,宽度100%: 2.下部(footer)Div高度固定100px,宽度100%: 3.中部(middle)DIV高 ...
- Go 接口使用
本文来自:CSDN博客 感谢作者:fengfengdiandia 查看原文:go 接口 Go 语言不是一种 “传统” 的面向对象编程语言:它里面没有类和继承的概念. 但是 Go 语言里有非常灵活的接口 ...
- leetcode-8.atoi · string *
题面 原题挺长的,还是英文,就不抄了,
- python链接sql server 乱码问题
import pymssql import sys import os reload(sys) sys.setdefaultencoding('utf-8') os.environ['NLS_LANG ...
- 1.Hbase集群安装配置(一主三从)
1.HBase安装配置,使用独立zookeeper,shell测试 安装步骤:首先在Master(shizhan2)上安装:前提必须保证hadoop集群和zookeeper集群是可用的 1.上传:用 ...
- jade-render-renderFile
var http = require('http'); var jade = require('jade'); http.createServer(function(req, res){ res.wr ...
- Derby数据库操作 常见错误和异常
一.插入(INSERT时报错) 1.错误:java.sql.SQLIntegrityConstraintViolationException: 列“test”无法接受空值. 可能原因:建表时test列 ...