Tips

做一个终身学习的人!

日拱一卒,功不唐捐。

今天有个小小的需求,具体需求是这样的:

  1. 有两个文本文件,每个文件都有一些字符串文本;
  2. 比较第一个文件中,在第二个文件中,不存在的字符串文本;
  3. 把这些在第二个文件中不存在的文本,拼接成SQL的插入语句,写入到文件中。

具体第一个文件中的内容是这样的:

Java
Redis
Spring
Hibernate
Spring MVC
Dubbo
RabbitMq

第二个文件中的内容如下:

Java 9
ZooKepper
MongoDB
Spring Boot
Git
Spring MVC
Mybatis
Memcache
Dubbo
RabbitMq

其实,这个小功能很简单,逻辑也不复杂,就是一个可能大家比较常用的一个小工具。

根据我的思路,我主要使用了以下技术和工具:

  • Java 8 Lambda表达式;
  • Java 8 中提供的集合stream方法;
  • Google Guava 工具提供了集合比较的方法。

具体看代码:

package com.howtoprogram;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream; import com.google.common.collect.Sets; /**
* Created by 324779.
* 比较两个文件中文本内容的不同,把第一个文本中不同的部分挑选出来,
* 拼成对应的insert语句,
* 最后写入文件中。
*/
public class FilterDifferWords { public static void main(String[] args) throws IOException {
Path txtFile = Paths.get("/Users/i324779/Documents/test.txt");
List<String> txtContent = loadContentFromFile(txtFile); Path csvFile = Paths.get("/Users/i324779/Documents/test.csv");
List<String> csvContent = loadContentFromFile(csvFile); // List 转换为Set是为了文本内容去重
// 使用Google Guava工具中的Sets类
Set<String> differContent = Sets.difference(new HashSet<>(txtContent), new HashSet<>(csvContent)); List<String> insertSqls = spliceSql(differContent); writeToFile(insertSqls);
} // end method main /**
* @param filePath 文件路径
* @return 读取文件中内容到列表中。
* @throws IOException
*/
private static List<String> loadContentFromFile(Path filePath) throws IOException {
return Files.readAllLines(filePath).stream()
.map(String::trim) // 去掉文本的空格
.filter(line -> !("".equals(line))) // 过滤空行
.collect(Collectors.toList());
} // end method loadContentFromFile /**
* 拼装insert语句,使用MYSQL数据库的语法
* @param differContent 两个文本比较后,第一个文本有,而第二个文本没有的内容。
* @return 拼装好insert语句的列表
*/
private static List<String> spliceSql(Set<String> differContent) {
return differContent.stream()
.flatMap(line -> Stream.of(String.format(
"INSERT INTO test(search, replacement, level, expire, create_time) "
+ "VALUES ('%s', '*', 0, '2099-12-31 23:59:59', now());\r",
line)))
.collect(Collectors.toList());
} // end method spliceSql /**
* 把列表中的sql语句写入文件中
* @param insertSqls 拼装好insert语句的列表
* @throws IOException
*/
private static void writeToFile(List<String> insertSqls) throws IOException {
Path sqlFile = Paths.get("/Users/i324779/Documents/insertSql.txt");
Files.write(sqlFile, insertSqls);
} // end method writeToFile } // end class FilterDifferWords

执行结果为:

如果你有这样类似的需求,只需要把文件路径修改一下即可。

哈哈,程序员是一群为了偷懒而最勤奋想办法的一类人。

比较两个文件不同以及生成SQL插入语句的更多相关文章

  1. 快速将一个表的数据生成SQL插入语句

    将一个表中的数据生成SQL插入语句,方便系统快速初始化,在数据库中执行创建以下过程就可以了. ) Drop Procedure GenerateData go CREATE PROCEDURE Gen ...

  2. excel数据生成sql insert语句

    excel数据生成sql insert语句 excel表格中有A.B.C三列数据,希望导入到数据库users表中,对应的字段分别是name,sex,age . 在你的excel表格中增加一列,利用ex ...

  3. 生成大量插入语句,并将语句写入txt文件中

    import java.io.*; /** * Created by czz on 2019/9/23. */ public class TTest { /** * 生成大量插入语句,并将语句写入tx ...

  4. Springboot接口简单实现生成MySQL插入语句

    Springboot接口简单实现调用接口生成MySQL插入语句 在实际测试中,有这样一个需求场景,比如:在性能压力测试中,可能需要我们事先插入数据库中一些相关联的数据. 我们在实际测试中,遇到问题,需 ...

  5. [lua, mysql] 将多条记录数据组合成一条sql插入语句(for mysql)

    -- 演示将多条记录数据组合成一条sql插入语句(for mysql) function getTpl0(tname) -- 获取表各个字段 local t = { tpl_pack = {" ...

  6. excel数据生成sql insert语句

    excel表格中有A.B.C三列数据,希望导入到数据库users表中,对应的字段分别是name,sex,age . 在你的excel表格中增加一列,利用excel的公式自动生成sql语句,方法如下: ...

  7. 把excel数据生成sql insert语句

    excel表格中有A.B.C三列数据,希望导入到数据库users表中,对应的字段分别是name,sex,age . 在你的excel表格中增加一列,利用excel的公式自动生成sql语句,方法如下: ...

  8. 小程序实现sql插入语句转换成Laravel迁移语句

    sql的插入语句长这样: INSERT INTO `media` (`MediaID`, `type`, `filename`, `title`) VALUES (1, 'word', 'word1. ...

  9. 如何通过注解Bean类来封装SQL插入语句

    整体思路是酱紫的: 给bean上注解说明该bean对应着数据库中哪张表,给每个bean的属性都注解说明各自对应着这张表的哪个字段. 通过类反射获取表名,通过逐个反射每个属性的getter方法,获取注解 ...

随机推荐

  1. !终端伪装测试之fuck校园网

    众所周知,中国校园网络是最特么弱的网络构架之一,因此也成为众多黑客和学生的攻击对象-肉鸡.为什么学生也是主要报复者呢,我想主要是源于对学校的愤恨吧,不多说了,我这次将介绍一下我的一个个人测试--对学校 ...

  2. 【beta】阶段 第七次 Scrum Meeting

    每日任务 1.本次会议为第七次 Meeting会议: 2.本次会议在下午14:45,课间休息时间在陆大楼召开,召开本次会议为10分钟. 一.今日站立式会议照片 二.每个人的工作 (有work item ...

  3. 201521123055 《Java程序设计》第5周学习总结

    1. 本章学习总结 2. 书面作业 Q1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误.并分析输出结果. 1. ...

  4. 201521123005 《Java程序设计》 第九周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己 ...

  5. Java程序设计——学生基本信息管理系统(团队+个人)

    学生信息管理系统(From:单身贵族) 团队部分 一.团队介绍("单身贵族"): 吴剑通[组长]:201521123056,唯一队员,网络1512班,团支书 二.项目git地址 三 ...

  6. 201521123049 《JAVA程序设计》 第13周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu ...

  7. 使用C#编写SqlHelper类

    无聊的周末,学习.编码无力.想找点事干但又不知道干点什么,猛然发现自己学过的SqlHelper快忘记了.于是乎虎躯一震心想怎能如此堕落下去,立马打开电脑,双手摸上键盘.写下此文作为学习过程中的复习,并 ...

  8. python基础之socket

    一.osi七层 完整的计算机系统由硬件,操作系统,软件组成. 互联网的核心就是由一堆协议组成,协议就是标准,如全世界通信的标准就是英语. 如果把计算机比作人,那么互联网协议就是计算机界的英语,所有计算 ...

  9. JDBC第二篇--【PreparedStatment、批处理、处理二进制、自动主键、调用存储过程、函数】

    这是我JDBC的第一篇 http://blog.csdn.net/hon_3y/article/details/53535798 1.PreparedStatement对象 PreparedState ...

  10. Django查询数据库性能优化

    现在有一张记录用户信息的UserInfo数据表,表中记录了10个用户的姓名,呢称,年龄,工作等信息. models文件 from django.db import models class Job(m ...