package org.littlewings.hazelcast.jcache; import java.io.Serializable; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.stream.IntStream; import javax.cache.Cache; import javax.cache.CacheManager; import javax.cache.Caching; import javax.cache.configuration.MutableConfiguration; import javax.cache.processor.EntryProcessor; import javax.cache.processor.EntryProcessorResult; import javax.cache.processor.MutableEntry; import javax.cache.spi.CachingProvider; public class EntryProcessorStarter { public static void main(String[] args) { try (CachingProvider provider = Caching.getCachingProvider(); CacheManager manager = provider.getCacheManager(); Cache<String, Integer> cache = manager.createCache("entryProcessorCache", new MutableConfiguration<>())) { /* IntStream .rangeClosed(1, 20) .forEach(i -> cache.put("key" + i, i)); */ Set<String> keys = new HashSet<>(); cache.forEach(entry -> keys.add(entry.getKey())); /* Map<String, EntryProcessorResult<Integer>> results = cache.invokeAll(keys, (entry, arguments) -> { System.out.printf("[%s] key = %s%n", Thread.currentThread().getName(), entry.getKey()); if (entry.exists()) { return entry.getValue() * 2; } else { return 0; } }); */ Map<String, EntryProcessorResult<Integer>> results = cache.invokeAll(keys, new MyEntryProcessor()); int result = results.entrySet() .stream() .mapToInt(e -> e.getValue().get()) .sum(); System.out.printf("Result = %d%n", result); } } public static class MyEntryProcessor implements EntryProcessor<String, Integer, Integer>, Serializable { @Override public Integer process(MutableEntry<String, Integer> entry, Object... arguments) { System.out.printf("[%s] key = %s%n", Thread.currentThread().getName(), entry.getKey()); if (entry.exists()) { return entry.getValue() * 2; } else { return 0; } } } }