private static <T> Iterable<T> concat(Iterable<T> first, Iterable<T> second) {
    Stream<T> firstStream = StreamSupport.stream(first.spliterator(), false);
    Stream<T> secondStream = StreamSupport.stream(second.spliterator(), false);
    Stream<T> concat = Stream.concat(firstStream, secondStream);
    return new Iterable<T>() {
      @Override
      public Iterator<T> iterator() {
        return concat.iterator();
      }
    };
  }
private static <T> Iterable<T> concat(Iterable<T> first, Iterable<T> second)