23 Ağustos 2017 Çarşamba

NavigableMap Arayüzü - SortedMap Gibidir

Giriş
Şu satırı dahil ederiz
import java.util.NavigableMap;
NavigableMap aynı zamanda bir SortedMap. Kalıtım hiyerarşisi şöyle:
SortedMap <---NavigableMap<--TreeMap
Sıralı Anahtarlar
Elemenalar sıralı tutulur
; key->value
10->A
15->B
20->C
Bu yüzden anahtar değerleri küçükten büyüğe dolaşmak mümkün.

Örnek
Bir metodun %30 diğerini %70 çalışmasını istiyoruz. Random sınıfı < 0.3 üretirse bir metodu çalıştırırız. [0.3 - 1.0) arasında bir değer üretirse başka bir metodu çalıştırırız..Şöyle yaparız.
NavigableMap<Double, Runnable> runnables = new TreeMap<>();

runnables.put(0.3, this::30PercentMethod);
runnables.put(1.0, this::70PercentMethod);

double percentage = Math.random();
for (Map.Entry<Double, Runnable> entry : runnables){
    if (entry.getKey() < percentage) {
        entry.getValue().run();
        break; // make sure you only call one method
    }
}
Kullanılan metodlar NavigableSet ile aynı anlama geliyor. Aralarındaki tek fark NavigableMap metodları Entry kelimesi ile biterler, yani xxxEntry şeklinde olurlar.

Bu sınıf <,<=,>,>= şeklinde liste veya tek eleman sorgulama imkanı tanır.
constructor
Şöyle yaparız.
NavigableMap<Double, Runnable> map = new TreeMap<>();
ceilingEntry (>= )
Verilen elemandan büyük eşit olan en küçük eleman alınır. Şöyle yaparız
NavigableMap<Float, String> neededMap = new TreeMap<Float, String>();
neededMap.put(1.0f, "first!");
neededMap.put(3.0f, "second!");
System.out.println(neededMap.ceilingEntry(2.0f));//"3.0=second!" verir
ceilingKey (>= )
Verilen anahtar değerden büyük eşit olan en küçük anahtar alınır. 

floorEntry (<=)
Verilen değerden küçük eşit olan en büyük eleman alınır.  Şöyle yaparız
private static <K, V> V mappedValue(TreeMap<K, V> map, K key) {
  Entry<K, V> e = map.floorEntry(key);//<= koşullunu sağlayanı ara
  if (e == null && e.getValue() == null) {//Eleman varsa, değeri null ise
     e = map.lowerEntry(key);//< koşulunu sağlayan en büyük elemanı bul
  }
  return e == null ? null : e.getValue();
}
floorKey (<=)
Verilen değerden küçük eşit olan en büyük anahtar alınır. 

headMap metodu (<)
Entry yerine SortedMap döner

lowerKey (<) metodu
Verilen değerden küçük eşit olan en büyük anahtar alınır. 

lowerValue (<) metodu
Verilen değerden küçük eşit olan en büyük eleman alınır. 


put metodu
Şöyle yaparız.
map.put(0.3, "30");
pollLastEntry
Bu metod ile en büyük elemanı almak mümkün.

tailMap metodu (>=)
Entry yerine SortedMap döner
Örnek
Elimizde şöyle bir kod olsun
TreeMap<Integer, Integer> map = new TreeMap<>();
map.put(1,1);
map.put(2,2);
map.put(3,3);
System.out.println("map: " + map);
Map<Integer, Integer> fromMap = map.tailMap(2);
Çıktı olarak şunu alırız
map: {1=1, 2=2, 3=3}
fromMap: {2=2, 3=3}

17 Ağustos 2017 Perşembe

Annotation Sınfı

Giriş
Şu satırı dahil ederiz.
import java.lang.annotation.Annotation;
constructor
Class nesnesinden elde etmek için şöyle yaparız.
Class<?> clazz = ...;alo
Class<? extends Annotation> annotationClass = ...;
Annotation annotation = clazz.getAnnotation (annotationClass);

16 Ağustos 2017 Çarşamba

Year Sınıfı

Giriş
Şu satırı dahil ederiz
import java.time.Year;
Bu sınıf Java 8'den beri var. Görece olarak yeni bir sınıf.

Path Arayüzü - NIO

Giriş
Bu sınıfı kullanmak için şu satırı dahil ederiz.
import java.nio.file.Path;
Bu sınıf Java 7'den beri var. Yani bayağı eski.

Path ve File birbirlerine dönüştürülebilirler.

Her işletim sınıfının yol için belirlediği bir üst sınır vardır. Linux'ta üst sınır şöyle öğrenilebilir.
# getconf PATH_MAX /
4096

# getconf NAME_MAX /
255
currentPath metodu
İki şekilde alınabilir. İlki System sınıfını kullanmak
Path currentPath = Paths.get(System.getProperty("user.dir"));
İkincisi ise boş string vermek.
Path currentRelativePath = Paths.get("");
Path currentDir = currentRelativePath.toAbsolutePath();
getFileName metodu
Path'in sadece dosya ismi olan kısmını döndürür. Şöyle yaparız.
Path p = Paths.get("C:\\Hello\\AnotherFolder\\The File Name.PDF");
String file = p.getFileName().toString();//The File Name.PDF verir
getFileSystem metodu
Şöyle yaparız.
Path path = ...;
// We obtain the file system of the Path
FileSystem fs = path.getFileSystem();

// We create the new WatchService using the new try() block
WatchService service = fs.newWatchService();
getNameCount metodu
İkiden sonraki tüm kısımları şöyle alırız.
Path incomingPath = Paths.get("C:\\cresttest\\parent_3\\child_3_1_.txt");
Path finalPath = incomingPath.subpath(2, incomingPath.getNameCount()));
getRoot metodu
Path'in temsil ettiği yolun en başındaki kısmı temsil eder.

of metodu

Yeni Path nesnesi yaratır. Paths.get() metodu yerine kullanılabilir.

relativize metodu
Path'in root kısmını çıkararak geri kalan kısmı verir

Örnek
Şöyle yaparız.  Sonuç olarak "data\processed\Test.xml" alırız
File file = new File("C:\\data\\processed\\Test.xml");
Path path = file.toPath();
path = path.getRoot().relativize(path);
Açıklaması şöyle.
path.getRoot() returns C:\
path.relativize(path) returns a relative path to a parameter.
resolve metodu
Path'in altındaki bir dosya ismini Path olarak verir veya İki path nesnesini birleştirir.

Örnek
Şöyle yaparız
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;

private final Path root = Paths.get("uploads");

@Override
public Resource load(String filename) {
  try {
    Path file = root.resolve(filename);
    Resource resource = new UrlResource(file.toUri());

    if (resource.exists() || resource.isReadable()) {
      return resource;
    } else {
      throw new RuntimeException("Could not read the file!");
    }
  } catch (MalformedURLException e) {
    throw new RuntimeException("Error: " + e.getMessage());
  }
}
Örnek
Şöyle yaparız.
Path incomingPath = Paths.get("C:\\cresttest\\parent_3\\child_3_1_.txt");
//getting C:\cresttest\, adding NEW_PATH to it
Path subPathWithAddition = incomingPath.subpath(0, 2).resolve("NEW_PATH");
resolveSibling metodu
resolveSibling metodu yazısına taşıdım

subPath metodu
Path'in belirtilen sayıdaki ilk kısımlarını döndürür
Örnek
Şöyle yaparız.  Sonuç olarak "data\processed\Test.xml" alırız
File file = new File("C:\\data\\processed\\Test.xml");
Path path = file.toPath();
int count = path.getNameCount();                        // the count of names
path = path.subpath(0, count);                          // all the names
Açıklaması şöyle.
path.getNameCount() returns the number of name elements in the path (3 in this case)
path.getName(0) returns data, path.getName(1) returns processed etc...
path.subpath(fromInclusive, toExclusive) returns a relative Path that is a subsequence of the name elements of this path.
Örnek
İlk iki kısmını şöyle alırız.
Path incomingPath = Paths.get("C:\\cresttest\\parent_3\\child_3_1_.txt");
//getting C:\cresttest\
Path subPathWithAddition = incomingPath.subpath(0, 2);
toAbsolutePath metodu
Belirtilen relative path'i absolute path haline getirir.
Path currentRelativePath = Paths.get("");
Path currentDir = currentRelativePath.toAbsolutePath();
toString metodu

Örnek
Path göreceli (relative) de olsa mutlak (absolute) ta olsa sonucu işletim sistemine göre değiştirir
Şöyle yaparız. Burada Windows'ta çalıştığım için / karakterini \ ile değiştirdi
Path path = Paths.get("target/jardirectory");
// target\jardirectory
String directoryPath = path.toString();
Örnek
Şöyle yaparız.
Path sourceFile = ...;
if (sourceFile.toString().toLowerCase().endsWith("jpg")) {...}