Advertisement
ILyaCyclone

groupFlatRows

Jul 1st, 2019
297
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.11 KB | None | 0 0
  1. /**
  2.  R - flat Row
  3.  P - Parent class
  4.  C - Child class
  5.  */
  6. public <R, P, C> List<P> groupFlatRows(Collection<R> rows
  7.             , Function<R, P> mapRowToParent
  8.             , Function<R, C> mapRowToChild
  9.             , BiConsumer<P, List<C>> setParentChildren
  10.             , Comparator<P> sortParents) {
  11.         // преобразовываем Collection<P> в Map<P, List<C>>
  12.         return rows.stream()
  13.                 .collect(groupingBy(mapRowToParent
  14.                         , mapping(mapRowToChild
  15.                                 , Collectors.toList())))
  16.                 // преобразовываем Map<P, List<C>> в List<P>, устанавливая дочерний List<C> в каждый P
  17.                 .entrySet().stream()
  18.                 .map(entry -> {
  19.                     P parent = entry.getKey();
  20.                     List<C> children = entry.getValue();
  21.                     setParentChildren.accept(parent, children);
  22.                     return parent;
  23.                 })
  24.                 // Stream<P>
  25.                 .sorted(sortParents)
  26.                 .collect(Collectors.toList());
  27.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement