Java8 has lots of new features that will help in writing code that express its intent more clearly and in concise way.
Difference is obvious for prejdk8 future task is required and some other special handling to make sure it works fine, but JDK8 just call to computeIfAbsent with lamdba expression and your are done.
There is computeIfPresent function also to remap/refresh value in cache.
Aggregate/Reduce values
This is also very common use case where single value is derived from values in map for eg total number of words
sample code for pre JDK8
sample code for JDK8
Code is so so much clean, extra thing to note in jdk8 reduce function is first parameter which is the (estimated) number of elements needed for this operation to be executed in parallel.
So this function supports parallel reducing
Iteration
All the collection of JDK8 has done improvement on iteration method, so application code will never have any loop, it is all controlled by underlying collection and due to which iteration can be done in parallel .
CHM has 2 types of foreach
others interesting functions are search
One thing to note is that all the parallel function are executed on common forkjoin pool, there is way by which you can provide your own pool to execute task.
ConcurrentHashMap has lots of nice features that reduces boiler plate code, most of the new features are parallel, so you don't have to worry about locks/threads etc when using CHM.
Smart Cache
One of the most common usage of CHM is to build cache and it has little concurrency issue that value for key should be computed once and it should provide all the "happens after" guarantee.
Pre JDK8 you have to do some thing like
JDK8 has special function computeIfAbsent for such type of thing
Difference is obvious for prejdk8 future task is required and some other special handling to make sure it works fine, but JDK8 just call to computeIfAbsent with lamdba expression and your are done.
There is computeIfPresent function also to remap/refresh value in cache.
Merge values
One of the most common problem with maps is when values of same keys needs to merged, one of the example is you have map of word & count.
Every time word is added to map and if it exists then count needs to be incremented
Example code pre JDK8
Example code in JDK8
All the noise that was there in JDK7 code is removed and code express its intent so nicelyOne of the most common problem with maps is when values of same keys needs to merged, one of the example is you have map of word & count.
Every time word is added to map and if it exists then count needs to be incremented
Example code pre JDK8
Example code in JDK8
Aggregate/Reduce values
This is also very common use case where single value is derived from values in map for eg total number of words
sample code for pre JDK8
sample code for JDK8
Code is so so much clean, extra thing to note in jdk8 reduce function is first parameter which is the (estimated) number of elements needed for this operation to be executed in parallel.
So this function supports parallel reducing
Iteration
All the collection of JDK8 has done improvement on iteration method, so application code will never have any loop, it is all controlled by underlying collection and due to which iteration can be done in parallel .
CHM has 2 types of foreach
others interesting functions are search
One thing to note is that all the parallel function are executed on common forkjoin pool, there is way by which you can provide your own pool to execute task.
nice code, but unfortunately full of errors...
ReplyDeletenice code, but unfortunately full of errors...
ReplyDeleteThanks for feedback.
DeleteWhich part has errors ? It will help me in fixing it.
wordMap.reduceValues(1,(count1,count2) -> count1+count2);
ReplyDeleteIn the above line what is the first argument? if 1 is supposed to be the initial value, shouldnt it be 0 instead?
wordMap.reduceValues(1,(count1,count2) -> count1+count2);
ReplyDeleteIn the above line what is the first argument? if 1 is supposed to be the initial value, shouldnt it be 0 instead?
Lovely post, thanks for posting.
ReplyDelete