1 解析 EXCEL 去重操作
描述:
最近在对业务进行实现时,遇到一个问题,就是针对于从EXCEL中读取数据后,如何先去除重复数据,然后再进行一系列的操作呢?
思考:
1 当时组长有提供一种思路,先对excel进行保存,然后再通过数据库的分组(group by)获取唯一的数据(请教之后告诉的一种思路,之前的操作上便是如此)<br /> 2 当时思考了一两天,自己有去通过treeSet 或者 HashMap去进行去重,但是都存在一些问题,无法满足实际的一个业务需求,后面在网上进行查找资料时,发现一种解题思路可以试一下,然后就直接编写代码进行尝试,满足当下的业务需求,就决定是他了。
实现:
通过双重for进行实现判断,在后者的属性与前者的属性一致时,可以对后者进行移除;<br /> 缺点:增加了空间开销<br /> 优点:减少了io操作,提高了效率
简单代码思路:
package com.orange.test;
import com.orange.student.Student;
import org.apache.commons.lang3.StringUtils;
import java.util.*;
import java.util.stream.Collectors;
public class Demo6 {
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
Student s = new Student("李四",18,"2022-02-16 12:00:35","1");
Student s1 = new Student("张飞",19,"2022-02-18 12:00:35","2");
Student s2 = new Student("张飞",19,"2022-02-18 12:00:35","3");// --
Student s3 = new Student("张飞",19,"2022-02-18 12:00:35","4");// --
Student s4 = new Student("张飞",19,"2022-02-18 12:00:35","5");// --
Student s5 = new Student("张飞",19,"2022-02-18 12:00:35","6");// --
Student s6 = new Student("王五",19,"","7");
Student s7 = new Student("王五",19,"2022-02-18 12:00:35","8");
Student s8 = new Student("王五",19,"2022-02-18 12:00:35","9");
list.add(s);
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s6);
list.add(s4);
list.add(s5);
list.add(s8);
list.add(s7);
//去重
for (int i = 0; i < list.size(); i++) //外循环是循环的次数
{
for (int j = list.size() - 1 ; j > i; j--) //内循环是 外循环一次比较的次数
{
if (list.get(i).getName().equals(list.get(j).getName()) && list.get(i).getAge() == list.get(j).getAge())
{
list.remove(j);
}
}
}
list.forEach(ss->{
System.out.println(ss);
});
}
package com.orange.student;
public class Student {
private String name;
private int age;
private String sendTime;
private String completeTime;
public Student() {
}
public Student(String name, int age, String sendTime, String completeTime) {
this.name = name;
this.age = age;
this.sendTime = sendTime;
this.completeTime = completeTime;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSendTime() {
return sendTime;
}
public void setSendTime(String sendTime) {
this.sendTime = sendTime;
}
public String getCompleteTime() {
return completeTime;
}
public void setCompleteTime(String completeTime) {
this.completeTime = completeTime;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", sendTime='" + sendTime + '\'' +
", completeTime='" + completeTime + '\'' +
'}';
}
}
注意点:
此次excel进行导入时,存在行号一起进行了导入,对于判断属性时,行号不应该在考虑的一个范围之内,而是针对其余属性进行考虑。