16 Haziran 2020 Salı

ByteSink Sınıfı

Giriş
Bu sınıfı ilk olarak burada duydum. Byte'ların yazılabileceği bir sınıftır. Açıklaması şöyle. Soyut bir sınıftır
ByteSink is intended for generic OutputStreams that don't have additional methods.

2 Haziran 2020 Salı

Splitter Sınıfı

fixedLength metodu
Mantık olarak Iterable döndürür
Örnek
Şöyle yaparız
Iterable<String> chunks = Splitter.fixedLength(30).split(string);
limit metodu
Örnek
Şöyle yaparız
String key = "mykey";
String value = "=2>@C=b";
String combined = key +"=" + value;

Splitter.on('=').limit(2).splitToList(combined);
Çıktı olarak şnu alırız.
[mykey, =2>@C=b]
on metodu
Ayraç karakterini belirtir.
Örnek
Şö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);
withKeyValueSeparator metodu
Iterable yerine Map döndürülmesine sebep olur. on() çağrısıyla key/value çiftleri arasındaki ayraç belirtilir. withKeyValueSeparator() çağrısıyla key/value arasındaki ayraç belirtilir.

Örnek
key/value çifti döndüğü ve bir Map'e yerleştirildiği için aynı key değerinden iki tane olamaz. Elimizde şöyle bir kod olsun
String fieldSplit = " ";
String valueSplit = "=";
String message = "ip=1.2.9.0 error=NA ip=1.2.9.0";
Map<String, String> parserMap = Splitter.on(fieldSplit).omitEmptyStrings()
.withKeyValueSeparator(valueSplit).split(message);
Exception olarak şunu alırız
... Duplicate key [ip] found.
Örnek
Şöyle yaparız.
String result = "...";
Map map = Splitter.on(",").withKeyValueSeparator(":").split(result);
Örnek
Şöyle yaparız.
String input = "..." +
Map<String, String> result = Splitter.on(":").withKeyValueSeparator("...").split(input);
Örnek
Şöyle yaparız
Splitter.MapSplitter mapSplitter = Splitter.on(",").withKeyValueSeparator("=");
String input = "A=1,B=2,C=null";
//when
Map<String, String> result = mapSplitter.split(input);
//then
assertThat(result)
  .containsExactly(entry("A", "1"),
                   entry("B", "2"),
                   entry("C", "null"));
// {A=1, B=2, C=null}

1 Haziran 2020 Pazartesi

BiMap Arayüzü

Giriş
Açıklaması şöyle.
A bimap (or "bidirectional map") is a map that preserves the uniqueness of its values as well as that of its keys. This constraint enables bimaps to support an "inverse view", which is another bimap containing the same entries as this bimap but with reversed keys and values.
Bu arayüzden kalıtan bir sınıf HashBimap.
Bir diğeri ise ImmutableBiMap. ImmutableBiMap elemanların ekleme sırasını koruyor.

forcePut metodu
Şöyle yaparız.
cache.forcePut(3, URI.create("http://example.com"));
System.out.println(cache);
// {2=http://stackoverflow.com, 3=http://example.com}
getOrDefault metodu
Örnek
Elimizde şöyle bir kod olsun. ForwardingBiMap sınıfı normalde Guava ile gelmiyor ancak biz kendimiz kodluyoruz.
public abstract class ForwardingBiMap<K,V> implements BiMap<K,V> {

  protected abstract BiMap<K,V> delegate();

  // implement *all* other methods with the following pattern:
  // ReturnType method(ParamType param) {
  //   return delegate().method(param);
  // }

}
Şöyle yaparız. ForwardingBiMap nesnesi yaratılır
public static <K,V> BiMap<K, V> validating(BiMap<K,V> delegate) {
  Objects.requireNonNull(delegate);
  return new ForwardingBiMap<K,V>() {

    @Overridea
    protected BiMap<K,V> delegate() { return delegate; }

    @Override
    public V getOrDefault(Object key, V defaultValue) {
      // Implement your own validation here
      return super.getOrDefault(key, defaultValue);
    }
  };
}
inverse metodu
Şöyle yaparız.
BiMap<String,String> textMap  = HashBiMap.create();

textMap.put("id_1","She");
textMap.put("id_2","has");
textMap.put("id_3","a"); 
textMap.put("id_4","neck");
textMap.put("id_5","pain");
BiMap<String,String> idToText = textMap.inverse();

System.out.println(idToText.get("neck")); 
System.out.println(idToText.get("pain"));
put metodu
Şöyle yaparız.
BiMap<String, String> m = HashBiMap.create();
m.put("Foo", "Bar");
m.put("Baz", "Bar"); // Throws IllegalArgumentException "value already present"
putIfAbsent metodu
Şöyle yaparız.
cache.putIfAbsent(1, URI.create("http://example.com"));
cache.putIfAbsent(2, URI.create("http://stackoverflow.com"));
System.out.println(cache);
// {1=http://example.com, 2=http://stackoverflow.com}