26 Ağustos 2018 Pazar

Double Brace Initialization

Giriş
Bu yöntemi kullanmamak lazım çünkü çok fazla inner class üretilmesine sebep oluyor.

Örnek
List için şöyle yaparız.
List<String> l = new ArrayList<String>() {{
  add("Hello");
  add("World!");
}};
Örnek
Map için şöyle yaparız.
 Map<String, String> map1 = new HashMap<String, String>(){{put(key, value);}};
Örnek
Set için şöyle yaparız.
Set<String> flavors = new HashSet<String>() {{
    add("vanilla");
    add("strawberry");
    add("chocolate");
    add("butter pecan");
}};
Java 9 ile şöyle yapmak daha iyi.
Set<String> flavors = Set.of("vanilla", "strawberry", "chocolate", "butter pecan");

24 Ağustos 2018 Cuma

FileReader Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.io.FileReader;
constructor - string
Şöyle yaparız.
new FileReader("C:\\test.txt")
constructor - File
Şöyle yaparız.
File file = new File("test.txt");
FileReader fr = new FileReader(file);
read metodu
Tek bir karakter okur. Şöyle yaparız.
try (FileReader fr = new FileReader(file)) {
  while ((c = fr.read()) != -1) {
    ...
  }
}


17 Ağustos 2018 Cuma

BlockingQueue Arayüzü

Giriş
Şu satırı dahil ederiz.
import java.util.concurrent.BlockingQueue;
Arayüzü gerçekleştiren sınıflardan bazıları ArrayBlockingQueue, DelayQueueLinkedBlockingQueue, PriorityBlockingQueue, SynchronousQueue. Şeklen şöyle


constructor
Arayüzü gerçekleştiren sınıflardan birisini kullanabiliriz.
BlockingQueue<Foo> q = new ArrayBlockingQueue<> (200);
add metodu - bloke olmaz, exception fırlatır
Eğer kuyruk doluysa, bloke olmak yerine exception atar. Exception istemiyorsak boolean sonuç dönen offer() kullanılabilir.
Throws: IllegalStateException - if this queue is full
drainTo metodu
Şöyle yaparız.
List<Foo> copy = ...;

// to grab up to 25 elements
q.drainTo (copy, 25);
element metodu - exception fırlatır,
Örnek ver

offer metodu - bloke olmaz, boolean döner
İmzası şöyle. Boolean sonuç yerine exception istiyorsak add() kullanılabilir.
public boolean offer (E e)
Şöyle yaparız. Eğer yer yoksa false döner.
boolean added = q.offer (e);
if (!added) {
  ...Do something
}
peek metodu - null döner
Örnek ver

poll metodu - bloke olmaz, null döner
null yerine exception istiyorsak, remove() kullanılabilir.
Örnek
Şöyle yaparız
/**
 * @param queue Queue containing a list of non-null elements
 */
private static <E> List<E> poll(Queue<E> queue, int n) {
  List<E> result = new ArrayList<>(n);
  for (int i = 0; i < n; i++) {
    // Could be optimized to fail fast on first null
    Optional.ofNullable(queue.poll()).ifPresent(result::add);
  }
  return result;
}
put metodu
Şöyle yaparız.
BlockingQueue< Integer > q = ...;
int i = 0;
q.put (i);
remove metodu - bloke olmaz, exception fırlatır
Exception yerine null istiyorsak, poll() kullanılabilir.

take metodu - bloke olur, null dönmez
İmzası şöyle
public E take () throws InterruptedException
Örnek
Şöyle yaparız. Eğer kuyruk boş ise bloke olur.
Foo request = q.take ();
Örnek
take metodu null dönemez. Şu kontrolü yapmak kuyruğa özellikle null konulmadıysa zorunlu değil.
if (request == null) {...}
Örnek
null kontrolü yapmadan şöyle yaparız.
private final BlockingQueue<Runnable> queue = new LinkedBlockingQueue<>();
private final Thread thread = new Thread(() -> {
  try {
      while (!Thread.interrupted()) {
        queue.take().run();
      }
  } catch (Exception ex) {
     ex.printStackTrace();
  }
});