Java 如何合并集合中的记录
我收集了包含以下记录的内容:Java 如何合并集合中的记录,java,collections,Java,Collections,我收集了包含以下记录的内容: [date_from, date_To, name] 我想合并记录,如果日期彼此跟随,或者日期包含一个公共部分,那么名称也应该相同。例如: [10.07.2020, 31.07.2020, A], [01.08.2020, 11.08.2020, A], [09.08.2020, 15.08.2020, A], [20.08.2020, 05.09.2020, C], [14.09.2020, 16.09.2020, X], [17.09.2020, 19.09.
[date_from, date_To, name]
我想合并记录,如果日期彼此跟随,或者日期包含一个公共部分,那么名称也应该相同。例如:
[10.07.2020, 31.07.2020, A], [01.08.2020, 11.08.2020, A], [09.08.2020, 15.08.2020, A], [20.08.2020, 05.09.2020, C], [14.09.2020, 16.09.2020, X], [17.09.2020, 19.09.2020, Y]
给我一个结果:
[10.07.2020, 15.08.2020, A], [20.08.2020, 05.09.2020, C], [14.09.2020, 16.09.2020, X], [17.09.2020, 19.09.2020, Y]
我在想用Java做这件事的最佳方法是什么。我假设您需要一个按名称和日期排列的唯一记录,它应该是从最旧到最新的。在下面的代码中,将日期改为新的,以满足您的需要
public class MultipleListingFromSIngle {
public static void main(String[] args) {
List<A> lst = new ArrayList<>();
A one = new A(new Date(), new Date(), "krish");
A one1 = new A(new Date(), new Date(), "krish");
A one2 = new A(new Date(), new Date(), "krish");
A two = new A(new Date(), new Date(), "two");
A three = new A(new Date(), new Date(), "three");
A four = new A(new Date(), new Date(), "four");
lst.add(one);lst.add(two);lst.add(three);lst.add(four);lst.add(one1);lst.add(one2);
List<String> namesList = lst.stream().map(A::getName).collect(Collectors.toList());
List<A> finalList = new ArrayList<>();
for (String name : namesList) {
List<A> filteredList = lst.stream().filter(x -> x.getName().equals(name)).collect(Collectors.toList());
if (filteredList.size() == 1) {
finalList.addAll(filteredList);
} else {
Date minDate =null;
Date maxDate=null;
String name1 = null;
for(A a1: filteredList) {
if (minDate == null && maxDate== null) {
minDate=a1.getFromDate();
maxDate=a1.getToDate();
name1=a1.getName();
} else {
if (minDate.after(a1.getFromDate())) {
minDate=a1.getFromDate();
}
if (maxDate.before(a1.getToDate())) {
maxDate=a1.getToDate();
}
}
}
finalList.add(new A(minDate, maxDate, name1));
}
}
System.out.println(finalList);
}
}你试过什么?请把你的密码贴出来好吗?
class A {
Date fromDate;
Date toDate;
String name;
public Date getFromDate() {
return fromDate;
}
public void setFromDate(Date fromDate) {
this.fromDate = fromDate;
}
public Date getToDate() {
return toDate;
}
public void setToDate(Date toDate) {
this.toDate = toDate;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public A(Date fromDate, Date toDate, String name) {
this.fromDate = fromDate;
this.toDate = toDate;
this.name = name;
}
public A() {
}
@Override
public String toString() {
return "A{" +
"fromDate=" + fromDate +
", toDate=" + toDate +
", name='" + name + '\'' +
'}';
}