Java 8 Stream API kullanımı

Java Stream collect (toplama) kullanımı: Bu örneklerde Stream collect() metodu yanında Collectors.toMap() metodundan da yararlanılmıştır. Bir obje listesini Map tipine çevirme: [code lang=”java”] Map<String, String> companyMap = companyList.stream().collect(Collectors.toMap(Company::getIdStr, Company::getName)); List<Department> departmentList = companyResp.getDepartmentList(); Map<String, String> departmentMap = departmentList.stream().collect(Collectors.toMap(Department::getIdStr, Department::getName)); [/code] * * * Java Stream map (dönüştürme) kullanımı: Bir obje listesini Map tipine çevirmek için: Bu örnekte lambda ifadelerinden yararlanılmıştır. Burada c->c ifadesi ile sırayla akan objemizin birebir aynısı Map’e eklenmiştir. Yukarıdaki collect işleminin aynısıdır ancak Map tipimiz String,String değil String,Object’dir. [code lang=”java”] Map<String, Department> departmentMapForObj = departmentList.stream().collect(Collectors.toMap(Department::getIdStr, c -> c)); [/code] Bir obje listesinin toString’lerini bir araya yazdırma: [code lang=”java”] myObjectList.stream().map(Object::toString).collect(Collectors.joining(", ")) [/code] Convert String array to int array: [code lang=”java”] System.out.println("Enter numbers (10 20 20 10 10 30 50 10 20)"); String[] numberStrArray = numbersStr.split(" "); int[] numberArray = Arrays.stream(numberStrArray).mapToInt(Integer::parseInt).toArray(); [/code] * * * Java Stream distinct (tekil hale getirme) kullanımı: Bir obje listesi içerisindeki çift kayıtlardan arındırıp için: Burada obje içerisinde equals() metodu bulunmalıdır. [code lang=”java”] List<int> tmpList = list.stream().distinct().collect(Collectors.toList()); candidateList = candidateList.stream().distinct().collect(Collectors.toList()); [/code] Java 8 öncesi ise [code lang=”java”] // Function to remove duplicates from an ArrayList public static <T> ArrayList<T> removeDuplicates(ArrayList<T> list) { Set<T> set = new LinkedHashSet<>(); set.addAll(list); list.clear(); // add the elements to set with no duplicates items list.addAll(set); return list; } [/code] * * * Java Stream filter (filtreleme) ve forEach (itere etme) kullanımı: Bu örnek obje içerisindeki sending() true olanları süzer(filter() ile) ve sonrasında döngüye(forEach() ile) sokarak işlem yaptırır. [code lang=”java”] tmpMyObjColumnList.stream() .filter(p -> p.sending();) .forEach(); tmpMyObjectList.stream() .filter(p -> (p.sending() && p.getAge() > 18 ) ) .collect(Collectors.toList()) .forEach(System.out::println); Arrays.asList("y","c","n").stream().forEach(System.out::println); [/code] * * * Java Stream forEach usage: Print the elements of the list. [code lang=”java”] rotatedList.stream().forEach(n -> System.out.print(n + " ")); /*****/ Arrays.asList("y","c","n").stream().forEach(System.out::println); /*****/ Stream<String> stream = Stream.of("a", "b", "c", "d", "e", "f"); stream.forEach(s -> System.out.println(s)); /** output: a b c d e f */ /*****/ Stream<String> stream = Stream.of("a", "b", "c", "d", "e", "f"); stream.forEach(System.out::println); /** output: a b c d e f */ /*****/ Stream<String> stream = Stream.of("a", "b", "c", "d", "e", "f"); System.out.println(stream.collect(Collectors.toList())); //output: [a, b, c, d, e, f] /*****/ Stream<String> stream = Stream.of("a", "b", "c", "d", "e", "f"); stream.peek(s -> System.out.println(s)).count(); /** output: a b c d e f */ [/code] * * * Java Stream findAny() kullanımı: obj.getType() değeri ConstantsSap.SUCCESS değeri ile aynı ise akıştaki bu obj değerini döner. [code lang=”java”] reqRespSapModelList .stream() .filter(obj -> ConstantsSap.SUCCESS.equals(obj.getType())) .findAny(); [/code] * * * Java Stream orElse() kullanımı: Akıştaki filter değerine eşit objeyi bulursa döner bulamazsa null döner. [code lang=”java”] reqRespSapModelList .stream() .filter(obj -> ConstantsSap.SUCCESS.equals(obj.getType())) .findAny() .orElse(null); [/code] * * * Java Stream reduce (indirgeme, listeyi azaltmak), kullanımı: Liste içindeki değer ile işlemler yapma, örneğin listedeki bir alanın toplamlarını hesaplama: Ancak bu float ve double toplama işlemlerinde küsuratlı sayıyı net elde edemeyebilirsiniz. Bunun önüne geçmek için floatSummation() metodunu kullanabilirsiniz. [code lang=”java”] Float sumSal = sturdyReturnCandidateList.stream() .map(SturdyReturn::getInvItemToBeReturnedAmount) .reduce(0.0f, Float::sum); Double sumSal = sturdyReturnCandidateList.stream() .map(SturdyReturn::getInvItemToBeReturnedAmount) .reduce(0.0, Double::sum); // listedeki objelerin getTotal alanlarının toplamı: // liste storeId’ye göre filtrelenerek elimizde listenin bir kısmı kalır, sonrasında MyObject’in getTotal özelliğini kullanacağımızı bildirdik ve bu getTotal değerlerini BigDecimal olarak toplayıp totalOfList değerine eşitler. BigDecimal totalOfList = myList.stream() .filter(t->storeId.equals(t.getStoreID())) .map(MyObject::getTotal) .reduce(BigDecimal.ZERO, BigDecimal::add); [/code] Float, Double işlemlerinde küsuratın kaybedilmemesi için: [code lang=”java”] float sum = 0.0f; for(SturdyReturn obj : sturdyReturnCandidateList) { sum = floatSummation(sum, obj.getInvItemToBeReturnedAmount()); } invItemsToBeReturnedTotalAmountStr = String.format("%.2f", sum); public static float floatSummation(float x, float y) { BigDecimal tmpInvItemToBeReturnedAmountBigDec = BigDecimal.valueOf(x + y); return tmpInvItemToBeReturnedAmountBigDec.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue(); } [/code] * * * Lambda expression sort, listenin alanlarına göre kıyas yapıp sıralama: [code lang=”java”] tmpMyObjColumnList.sort((p1, p2) -> p1.getColumnOrder() – p2.getColumnOrder()); sparePartList.sort(Comparator.comparing(ProductModel::getCode)); [/code] * * * Lambda expression removeIf, liste içinden bir öğeyi silme: productCode null olan elemanları siler. [code lang=”java”] pwrtoolExplodedPictureDataList.removeIf(p -> p.getProductCode() == null); [/code] * * * Lambda expression Match: productCode null olan elemanları siler. [code lang=”java”] pwrtoolExplodedPictureDataList.removeIf(p -> p.getProductCode() == null); [/code] * * *]]>

Leave a Reply

Your email address will not be published. Required fields are marked *