Guava
adresini [Guava] etiketi anlaşılacağı gibi (terminal operasyonları vs orta), en Guava toplama işlemleri tembeldir - onlar sadece bir kez ihtiyaç uygulanır. Örneğin:
List<String> strings = Lists.newArrayList("1", "2", "3");
List<Integer> integers = Lists.transform(strings, new Function<String, Integer>() {
@Override
public Integer apply(String input) {
System.out.println(input);
return Integer.valueOf(input);
}
});
Bu kod aynı zamanda çıkışa dizeleri yazarken bir List<String>
List<Integer>
bir dönüştürmek gibi görünüyor. Ama eğer onu çalıştırırsan, hiçbir şey yapmaz. Biraz daha kod eklemek edelim:
for (Integer i : integers) {
// nothing to do
}
Şimdi girdileri dışarı yazıyor!
Bu, Lists.transform()
yönteminin aslında dönüştürme işlemini gerçekleştirmemesi, ancak yalnızca gerekli olduğunda değerleri hesaplayan özel hazırlanmış bir sınıf döndürmesidir.
Her şeyin güzel çalıştığını gösteren bonus: Boş döngüyü çıkarır ve mesela; Sadece integers.get(1);
, aslında sadece 2
numarasını çıkarırdı.
Birden çok yöntemi birlikte zincirlemek isterseniz, her zaman FluentIterable
vardır. Bu temelde Java 8 Stream benzeri tarzda kod yazmanıza olanak tanır.
Goldman Sachs Koleksiyonları
Guava genellikle varsayılan olarak doğru olanı yapar ve JDK sınıfları ile çalışırken, bazen bir şeyin daha karmaşık gerekir. Goldman Sachs koleksiyonlarının geldiği yer burasıdır. GS koleksiyonları, hayal edebileceğiniz her şeyle birlikte eksiksiz bir koleksiyon koleksiyonu çerçevesine sahip olmanız sayesinde size daha fazla esneklik ve güç sağlar. Tembellik varsayılan olarak theer değil, ama kolayca elde edilebilir: Yine
FastList<String> strings = FastList.newListWith("1", "2", "3");
LazyIterable<Integer> integers = strings.asLazy().collect(new Function<String, Integer>() {
@Override
public Integer valueOf(String string) {
System.out.println(string);
return Integer.valueOf(string);
}
});
, hiçbir şey yapmaz. Ancak, herşeyi aniden çıktı olarak verir.
P.S. Gerçek dünyada, bir "List" Listesini "" Listesine dönüştürmek zorunda kalırsam, ['Ints.stringConverter()'] kullanırdım (http://docs.guava-libraries.googlecode.com /git-history/release/javadoc/com/google/common/primitives/Ints.html#stringConverter%28%29) dönüştürme işlevi olarak. –