26 Aralık 2018 Çarşamba

ListenableFuture Arayüzü

Giriş
Şu satırı dahil ederiz.
import com.google.common.util.concurrent.ListenableFuture;
Bu arayüzü elde etmek için şu executor kullanılır.
ListeningExecutorService pool = MoreExecutors.listeningDecorator(
  Executors.newFixedThreadPool(10));
ListenableFuture bitince kod çalıştırmak için FutureCallback kullanılır

constructor
Şöyle yaparız.
Runnable runnable = () -> {};

ListenableFuture<?> future = executor.submit(runnable);
get metodu
Şöyle yaparız.
ListenableFuture<List<T>> futureOfList = ...; 
List<T> responses;
try {
  responses = futureOfList.get(timeoutMillis, TimeUnit.MILLISECONDS);
} catch (TimeoutException e) {
  ...
}
return responses;

11 Aralık 2018 Salı

ListenableFutureTask Sınıfı

Giriş
Verilen Callable'dan ListenableFuture yaratır.

create metodu
Şöyle yaparız.
public ListenableFuture<Graph> reload(final String key, Graph prev) {
  ListenableFutureTask<Graph> task = ListenableFutureTask.create(new Callable<Graph>() {
    ...
  });
  executor.execute(task);
  return task;
}

ImmutableSetMultimap Sınıfı

flatteningToImmutableSetMultimap metodu
Şöyle yaparız.
String pairs = "cat:01,02,03;dog:AA,BB,CC;fish:A1,A2";

Map<String, String> map = Splitter.on(';')
    .withKeyValueSeparator(':')
    .split(pairs);

ImmutableSetMultimap<String, String> pairMap = map.entrySet().stream()
    .collect(ImmutableSetMultimap.flatteningToImmutableSetMultimap(
        Map.Entry::getKey,
        e -> Streams.stream(Splitter.on(',').split(e.getValue()))));

System.out.println(pairMap);
Çıktı olarak şunu alırız.
// {cat=[01, 02, 03], dog=[AA, BB, CC], fish=[A1, A2]}

5 Aralık 2018 Çarşamba

Queues Sınıfı

Giriş
Şu satırı dahil ederiz.
import com.google.common.collect.Queues;
Lists, Sets,ve Maps sınıfları gibi static utility metodlarından oluşur.

newConcurrentLinkedQueue metodu
java.util.Queue; döner. Şöyle yaparız.
Queue<AccelerometerEvent> eventQueue = Queues.newConcurrentLinkedQueue();

LineProcessor Arayüzü

processLine metodu
Şöyle yaparız.
new LineProcessor<List<String>>() {

  List<String> result = Lists.newArrayList();

  public boolean processLine(String line) {
    if (line matches regex){
      result.add(line.trim());
    }

    return true;//continue processing

  }

  public List<String> getResult() {return result;}

});

ForwardingSet Sınıfı

Giriş
Şu satırı dahil ederiz.
import com.google.common.collect.ForwardingSet;
Açıklaması şöyle.
By subclassing ForwardingXXX and implementing the delegate() method, you can override only selected methods in the targeted class, adding decorated functionality without having to delegate every method yourself.
Bu sınıfın protected abstract bir delegate() metodu vardır. Bu metod override edilerek klasik bir Set metodu dekore (decorate) edilebilir. Yani bu sınıf ile bir set'in davranışını değiştirmek mümkün.

Örnek
Şöyle yaparız.
public class SetA extends ForwardingSet<String>
{
  final ImmutableSet<String>  delegate;   // backing list

  @Override
  protected ImmutableSet<String> delegate()
  {
    return this.delegate;
  }
  ...
}

4 Aralık 2018 Salı