private <K> void doLambdaWriteListeners(Supplier<K> keySupplier,
WriteOnlyMap<K, String> wo, boolean isOwner) throws Exception {
K key1 = keySupplier.get(), key2 = keySupplier.get();
List<CountDownLatch> latches = launderLatches(new ArrayList<>(), 1);
AutoCloseable onWrite = wo.listeners().onWrite(read -> {
assertEquals("write", read.get());
latches.get(0).countDown();
});
awaitEventIfOwnerAndLaunderLatch(isOwner, wo.eval(key1, new SetConstantOnWriteOnly("write")), latches);
awaitEventIfOwnerAndLaunderLatch(isOwner, wo.eval(key1, new SetConstantOnWriteOnly("write")), latches);
onWrite.close();
awaitNoEvent(wo.eval(key2, new SetConstantOnWriteOnly("write")), latches.get(0));
awaitNoEvent(wo.eval(key2, new SetConstantOnWriteOnly("write")), latches.get(0));
AutoCloseable onWriteRemove = wo.listeners().onWrite(read -> {
assertFalse(read.find().isPresent());
latches.get(0).countDown();
});
awaitEventIfOwnerAndLaunderLatch(isOwner, wo.eval(key1, removeConsumer()), latches);
onWriteRemove.close();
awaitNoEvent(wo.eval(key2, removeConsumer()), latches.get(0));
}