Skip to content

Instantly share code, notes, and snippets.

@pmartycz
Created July 3, 2018 16:51
Show Gist options
  • Save pmartycz/a0f0cbd34f21dd6f18fe40a2d6c9efa7 to your computer and use it in GitHub Desktop.
Save pmartycz/a0f0cbd34f21dd6f18fe40a2d6c9efa7 to your computer and use it in GitHub Desktop.
private Optional<TemplateRule> findBestTemplateRule(List<TemplateRule> list) {
Predicate<TemplateRule> byClientId = r -> Objects.equals(r.getClientId(), shipment.getClientId());
Predicate<TemplateRule> byLastMile = r -> r.getLastMile() == shipment.getLastMileEnum();
Predicate<TemplateRule> byFirstMile = r -> r.getFirstMile() == shipment.getFirstMileEnum();
Predicate<TemplateRule> byFirstMileAndLastMile = byFirstMile.and(byLastMile);
Stream<TemplateRule> one = list.stream().filter(byFirstMileAndLastMile.and(byClientId));
Stream<TemplateRule> two = list.stream().filter(byFirstMile.and(byClientId));
Stream<TemplateRule> three = list.stream().filter(byLastMile.and(byClientId));
Stream<TemplateRule> four = list.stream().filter(byClientId);
Stream<TemplateRule> five = list.stream().filter(byFirstMileAndLastMile);
Stream<TemplateRule> six = list.stream().filter(byFirstMile);
Stream<TemplateRule> seven = list.stream().filter(byLastMile);
Stream<TemplateRule> eight = list.stream();
return Stream.of(one, two, three, four, five, six, seven, eight)
.map(Stream::findAny)
.filter(Optional::isPresent)
.findFirst()
.orElse(Optional.empty());
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment