Java 8 thread for loop

Im new for Java 8 streams and would like to convert the following block code to Java 8 Stream to do the same.

Change Updates class names to be less confusing. (Removed Foo, Bar, Baz ...)

ArrayList<PriceList> priceLists = new ArrayList<PriceList>(); // I'm casting to a type-safe List from getObjects() // -which is a function I dont have access to. Is there a nice // solution to embed this in the stream-syntax? List<PriceListGroup> distObjects = (List<PriceListGroup>) objects.get(1).getObjects(); for(PriceListGroup group : distObjects) { Set<Affiliate> affiliates = group.getAffiliates(); for(Affiliate affiliate : affiliates) { priceLists.add(affiliate.getPriceList()); } } 

All help and explanation appreciated

+6
source share
2 answers

You can do this with flatMap :

 List<FooBO> list1 = objects.get(1).getObjects().stream() .flatMap (b -> b.getAffiliates().stream()) .map(BazBo::getPriceList) .collect(Collectors.toList()); 

Edit:

Since objects.get(1).getObjects() seems to return a List<Object> , a throw is required. To be safe, you can also add a filter that ensures that the Object type is indeed BarBO before translation:

 List<FooBO> list1 = objects.get(1).getObjects().stream() .filter (o -> (o instanceof BarBo)) .map (o -> (BarBO)o) .flatMap (b -> b.getAffiliates().stream()) .map(BazBo::getPriceList) .collect(Collectors.toList()); 

EDIT:

Here's the answer with the class names of the editable question:

 List<PriceList> priceLists = distObjects.stream() .flatMap (g -> g.getAffiliates().stream()) .map(Affiliate::getPriceList) .collect(Collectors.toList()); 
+11
source

Given your classes (in the example you provided, and assuming that it compiles at least), I don't understand why flatMap didn't work twice:

  List<BarBO> input = new ArrayList<>(); List<FooBO> result = input.stream() .flatMap((BarBO token) -> { return token.getAffiliats().stream(); }) .flatMap((BazBO token) -> { return token.getPriceList().stream(); }) .collect(Collectors.toList()); 
0
source

Source: https://habr.com/ru/post/984424/


All Articles