こんにちわ、みけです。
件のとおり、LTしてきました。
まあ、あまり面白いLTではなかったので、
アレですが、みなさんがStream
をうまく書けるようになるコツを
伝えられたのではないかと、
勝手に思って、自己満足しています。
なお、当日の様子は@yamadamnさんのエースらしいまとめ
JJUG ナイト・セミナー 「ビール片手にLT&納涼会」 #jjugに
が詳しいです。
また、資料は@kikutaro_さんのJavaEEっぷりが発揮されたエントリー
#jjug ナイト・セミナー「ビール片手にLT&納涼会」に参加&LTしましたー - Challenge JavaEE
にまとまって掲載されています。
さて、僕が適当に出した「九九表をfor使わずに書く」という問題ですが、
@skrbさんが「僕ならiterate
を使う。そっちの方が速い」ということで、
iterate
を使った奴も書いてみました。
@Test public void 九九表 () { final IntValue value = new IntValue(); IntStream .iterate(1, prev -> prev == 0? value.increment() : prev / value.get() == 9? 0 : prev + value.get()) .limit(90) .mapToObj(v -> v == 0? System.lineSeparator() : String.format("%3d", v)) .forEach(System.out::print); } class IntValue { private int value = 1; int increment() { value += 1; return get(); } int get() {return this.value;} }
僕が書くとif文が汚くなりますね…
きっと誰かがいい感じに書いてくれるでしょう|д゚)チラッ
あと、今回のLTではやらなかったのですが、
CompletableFuture
をあわせてスリープソートをやるというネタも
作ってあったので紹介しておきます。
private static final int[] NUMBERS = new int[]{8, 6, 1, 2, 13, 14, 13, 8, 11, 2, 14, 3, 0, 6, 2, 8, 4, 9, 6, 11}; @Test public void スリープソート () throws ExecutionException, InterruptedException { final ExecutorService executor = Executors.newFixedThreadPool(NUMBERS.length); CompletableFuture.allOf(IntStream.of(NUMBERS) .mapToObj(Worker::new) .map(worker -> CompletableFuture.runAsync(worker, executor)) .toArray(CompletableFuture[]::new)).get(); Worker.result().forEach(System.out::println); } static class Worker implements Runnable { private static final IntValue INDEXER = new IntValue(); private static final BlockingQueue<Worker> QUEUE = new LinkedBlockingQueue<>(NUMBERS.length); private final int value; private final int index; Worker(int value) { this.value = value; this.index = INDEXER.get(); INDEXER.increment(); } @Override public void run() { try { Thread.sleep(value * 100); QUEUE.offer(this); } catch (InterruptedException ignore) { } } static Queue<Worker> result() { return QUEUE; } @Override public String toString() { return "[value = " + String.format("%3d", value) + " / index = " + String.format("%3d", index) + "]"; } }
(IntValue
クラスは前掲のもの)
おわり