@Override
 public void writeTopWords(
     OnlineLDAResult onlineLDAResult, CloseableWriter writer, int topWordsCount) {
   List<Topic> topics = onlineLDAResult.getTopics();
   System.out.println();
   for (int t = 0; t < topics.size(); t++) {
     writer.appendLine("--------- TOPIC " + t + "-------------------");
     topics
         .get(t)
         .words
         .stream()
         .sorted((x, y) -> Double.compare(y.probability, x.probability))
         .limit(topWordsCount)
         .forEachOrdered(w -> writer.appendLine(w.word + " -> " + w.probability));
     writer.appendLine("\n");
   }
 }
  @Override
  public void writeDocumentTopicsDistribution(
      OnlineLDAResult onlineLDAResult, CloseableWriter writer) {
    List<Document> documents = onlineLDAResult.getDocuments();
    Function<double[], String> topicsFormatter =
        (topics) -> {
          StringBuilder sb = new StringBuilder("");
          for (int t = 0; t < topics.length; t++) {
            sb.append(topics[t]).append(" ");
          }
          return sb.toString();
        };

    int topics = documents.get(0).getTopicsDistribution().length;
    for (int t = 0; t < topics; t++) {
      final int topic = t;
      writer.appendLine("TOPIC " + topic + ":");
      documents
          .stream()
          .sorted(
              (x, y) ->
                  Double.compare(
                      y.getTopicsDistribution()[topic], x.getTopicsDistribution()[topic]))
          .forEachOrdered(
              d ->
                  writer.appendLine(
                      new StringBuilder("")
                          .append(d.getIdentifier())
                          .append(":")
                          .append(d.getTitle())
                          .append(":")
                          .append(topicsFormatter.apply(d.getTopicsDistribution()))
                          .toString()));
      writer.appendLine("\n");
    }
  }