Created
February 27, 2020 20:52
-
-
Save samuelmale/818345e8a48b1a12ea900a097debb742 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public void shortListProgramsAndWorkflows(List<Program> programs, List<ProgramWorkflow> workflows) { | |
Predicate<Entry<ProgramWorkflow, Program>> predicate = entry -> { | |
return entry.getValue().getAllWorkflows().contains(entry.getKey()); | |
}; | |
filter(programs, workflows, predicate); | |
} | |
public void shortListWorkflowsAndStates(List<ProgramWorkflow> workflows, List<ProgramWorkflowState> states) { | |
Predicate<Entry<ProgramWorkflowState, ProgramWorkflow>> predicate = entry -> { | |
return entry.getValue().getStates(false).contains(entry.getKey()); | |
}; | |
filter(workflows, states, predicate); | |
} | |
public void shortListProgramsAndStates(List<Program> programs, List<ProgramWorkflowState> states) { | |
Predicate<Entry<ProgramWorkflowState, Program>> predicate = entry -> { | |
for (ProgramWorkflow workflow : entry.getValue().getAllWorkflows()) { | |
if (workflow.getStates(false).contains(entry.getKey())) { | |
return true; | |
} | |
} | |
return false; | |
}; | |
filter(programs, states, predicate); | |
} | |
private <Owner, Owned> void filter(List<Owner> owningTypes, List<Owned> ownedTypes, Predicate<Entry<Owned, Owner>> predicate) { | |
List<Entry<Owned, Owner>> ownedToOwnersMap = new ArrayList<>(); | |
List<Owner> ownersFiltrate = new ArrayList<>(); | |
List<Owned> ownedMembersFiltrate = new ArrayList<>(); | |
Function<Owner, List<Entry<Owned, Owner>>> ownersToOwnedMapper = owner -> { | |
HashMap<Owned, Owner> map = new HashMap<>(); | |
for (Owned ownedType : ownedTypes) { | |
map.put(ownedType, owner); | |
} | |
return new ArrayList<>(map.entrySet()); | |
}; | |
Consumer<Entry<Owned, Owner>> updateFiltrates = entry -> { | |
ownedMembersFiltrate.add(((Entry<Owned, Owner>)entry).getKey()); | |
ownersFiltrate.add(((Entry<Owned, Owner>)entry).getValue()); | |
}; | |
owningTypes.stream().map(ownersToOwnedMapper).forEach(item -> ownedToOwnersMap.addAll(item)); | |
ownedToOwnersMap.stream().filter(predicate).forEach(updateFiltrates); | |
// update the shortlists | |
owningTypes.retainAll(ownersFiltrate); | |
ownedTypes.retainAll(ownedMembersFiltrate); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment