Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
272 views
in Technique[技术] by (71.8m points)

java - Adding concurrency with iterating over a collection, mapping to multiple hash maps and reducing to one

Have a specific use case and not too sure of the best approach.

So the current approach right now is that I'm iterating over a collection of objects (closeable iterator) and mapping them in a hashmap (dealing with conflicts appropriately, comparing by an object's date property).

I'm looking for a parallel approach to speed things up and the initial idea was to use Java 8 streams with parallel and forEach utilizing a concurrent hashmap to enable concurrency. The main bottleneck with this approach seems to be the concurrent hashmap and there are no improvements with this approach at adding concurrency.

My idea right now is to map into multiple hashmaps in parallel. Then reduce into a single hashmap dealing with conflicts appropriately. Wondering how I would implement such an approach in Java using Streams. I know there are built in map and reduce operations but not sure about the approach of collecting multiple hashmaps (perform the operation and add to a set?).

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Try using the groupingBy() function. For example

stream.collect(Collectors.groupingBy(Locale::getCountry));

generates a map that has the countries as keys and the Locales with that country as values


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...