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 + '\'' +
            '}';
}