簡體   English   中英

編年史隊列:使用更少或沒有lambda的用法

[英]Chronicle Queue: Usage with less or no lambdas

該文檔顯示了通常帶有lambda的附加器或附加器的用法,如下所示:

appender.writeDocument(wireOut -> wireOut.write("log").marshallable(m ->
      m.write("mkey").text(mkey)
       .write("timestamp").dateTime(now)
       .write("msg").text(data)));

對於尾部II,請使用:

   int count = 0;
   while (read from tailer ) { 
      wire.read("log").marshallable(m -> {
             String mkey = m.read("mkey").text();
            LocalDateTime ts = m.read("timestamp").dateTime();
             String bmsg = m.read("msg").text();
         //... do more stuff, like updating counters
             count++;
       }
   }

在讀取期間,我想做一些更新計數器之類的事情,但這在lambda中是不可能的(需要“有效地最終”值/對象)。

  • 使用不帶lambda的API的良好做法是什么?
  • 關於如何執行此操作還有其他想法嗎? (當前我使用AtomicInteger對象)
static class Log extends AbstractMarshallable {
    String mkey;
    LocalDateTime timestamp;
    String msg;
}

int count;

public void myMethod() {
    Log log = new Log();
    final SingleChronicleQueue q = SingleChronicleQueueBuilder.binary(new File("q4")).build();
    final ExcerptAppender appender = q.acquireAppender();
    final ExcerptTailer tailer = q.createTailer();

    try (final DocumentContext dc = appender.writingDocument()) {
        // this will store the contents of log to the queue
        dc.wire().write("log").marshallable(log);
    }

    try (final DocumentContext dc = tailer.readingDocument()) {
        if (!dc.isData())
             return;
        // this will replace the contents of log
        dc.wire().read("log").marshallable(log);
        //... do more stuff, like updating counters
        count++;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM