【发布时间】:2019-02-22 13:58:10
【问题描述】:
我有一个对象列表。对象如下所示:
public class Slots {
String slotType;
Visits visit;
}
public class Visits {
private long visitCode;
private String agendaCode;
private String scheduledTime;
private String resourceType;
private String resourceDescription;
private String visitTypeCode;
...
}
我需要找到具有相同agendaCode、visitTypeCode 和scheduledTime 的元素,而我这辈子都做不到。
我试过这个:
Set<String> agendas = slotsResponse.getContent().stream()
.map(Slots::getVisit)
.map(Visits::getAgendaCode)
.collect(Collectors.toUnmodifiableSet());
Set<String> visitTypeCode = slotsResponse.getContent().stream()
.map(Slots::getVisit)
.map(Visits::getVisitTypeCode)
.collect(Collectors.toUnmodifiableSet());
Set<String> scheduledTime = slotsResponse.getContent().stream()
.map(Slots::getVisit)
.map(Visits::getScheduledTime)
.collect(Collectors.toUnmodifiableSet());
List<Slots> collect = slotsResponse.getContent().stream()
.filter(c -> agendas.contains(c.getVisit().getAgendaCode()))
.filter(c -> visitTypeCode.contains(c.getVisit().getVisitTypeCode()))
.filter(c -> scheduledTime.contains(c.getVisit().getScheduledTime()))
.collect(Collectors.toList());
但它并没有像我想象的那样做。理想情况下,我会有一个列表列表,其中每个子列表是共享相同agendaCode、visitTypeCode 和scheduledTime 的插槽对象列表。我在函数式编程中挣扎,所以任何帮助或指针都会很棒!
这是 Java 11,我也在使用 vavr。
【问题讨论】:
-
您可以看看answer 中的
filter逻辑,我相信这将解决您的问题。
标签: java functional-programming java-stream vavr