2 Ekim 2019 Çarşamba

Lists Sınıfı

Giriş
Şu satırı dahil ederiz.
import com.google.common.collect.Lists;
asList metodu
Şöyle yaparız.
String first = "first";
String[] rest = { "second", "third" };
List<String> list = Lists.asList(first, rest);
cartesianProduct metodu
Elimizde şöyle bir kod olsun
Map<String, List<String>> map = new HashMap<>();
map.put("first", asList("first1", "first2", "first3"));
map.put("second", asList("second1", "second2", "second3"));
map.put("anyOther", asList("anyType1", "anyType2", "anyType3"));
Tüm many kısımların çarpımını almak için şöyle yaparız.
final List<List<String>> product = 
  Lists.cartesianProduct(ImmutableList.copyOf(map.values()));
Çıktı olarak şunu alırız
first1;second1;anytype1
first1;second2;anytype2
first1;second3;anytype3
first1;second1;anytype1
first1;second2;anytype3
first1;second3;anytype2
.....
newArrayList metodu
Metodun içi şöyle
public static <E> ArrayList<E> newArrayList() {
  return new ArrayList<E>();
}
Örnek
Şöyle yaparız
public List<String> message() {
  return Lists.newArrayList("One");
}
newArrayList - Array
Şöyle yaparız
Lists.newArrayList("a","b");
newArrayList metodu - Iterable
Örnek ver

newArrayList metodu - Iterator
Verilen iterator'den ArrayList oluşturur. Şöyle yaparız.
Lists.newArrayList(Iterables.filter(iterator, x->...));
partition metodu
Listeyi belirtilen sayı kadarlık daha küçük alt listeler böler.
Örnek
Şöyle yaparız
int batch_size = 1000;
List<Integer> numbers = IntStream.rangeClosed(1, 11100)
  .boxed().toList();
List<List<Integer>> partition = Lists.partition(numbers, batch_size);
partition.forEach(System.out::println);
Örnek
Şöyle yaparız. Listeyi 2 elemanlık daha küçük alt listelere böler.
List<Integer> mylist = Arrays.asList(1,2,3,4,5,6,7,8,9,10,11,12);
List<List<Integer>> partionList = Lists.partition(mylist, 2);
        
System.out.println(partionList);
Çıktı olarak şunu alırız
[[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11, 12]]
Örnek
Listeyi 3 elemanlık alt listelere bölüp her alt listenin toplamını almak için şöyle yaparız
List<SaleTxn> saleTxns = new ArrayList<>();
saleTxns.add(new SaleTxn(1, "2018-10-10", 100));
saleTxns.add(new SaleTxn(2, "2018-10-11", 200));
saleTxns.add(new SaleTxn(3, "2018-10-12", 100));
saleTxns.add(new SaleTxn(4, "2018-10-13", 100));
saleTxns.add(new SaleTxn(5, "2018-10-14", 200));
saleTxns.add(new SaleTxn(6, "2018-10-15", 200));

// implement of filter
saleTxns = saleTxns.stream().filter(saleTxn -> true).collect(Collectors.toList());

// partition the list and sum all value
List<Integer> result = Lists.partition(saleTxns, 3).stream()
    .mapToInt(value -> value.stream().mapToInt(SaleTxn::getAmount).sum())
    .boxed()
    .collect(Collectors.toList());

System.out.println(result);
Çıktı olarak şunu alırızz
[400, 500]
reverse metodu
Açıklaması şöyle.
Unlike Collections.reverse, this is purely a view... it doesn't alter the ordering of elements in the original list. Additionally, with an original list that is modifiable, changes to both the original list and the view are reflected in the other.
Şöyle yaparız.
List<String> letters = ImmutableList.of("a", "b", "c");
List<String> reverseView = Lists.reverse(letters); 
transform metodu
Bir List içindeki nesne bir başka nesne tipine dönüştürülebiliyor. Yeni bir liste dönmez!

Hiç yorum yok:

Yorum Gönder