Java 8

Strategy Design Patterns using Lambda

&NewLine;<h2 class&equals;"wp-block-heading"><span style&equals;"&comma; Helvetica&comma; Arial&comma; sans-serif&semi;font-size&colon; var&lpar;--artdeco-reset-typography&lowbar;getFontSize&rpar;">Strategy Design Pattern<&sol;span>s<&sol;h2>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">We can easily create a strategy design pattern using lambda&period; <&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">To implement this pattern we will be using Interfaces and classes&period; The interface declares a behaviour and concrete classes define the behaviour&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">If we want to introduce a new behaviour to the design&comma; we need to add a new concrete class&period; So this implementation ends up with tons of concrete classes&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph"><strong>Example<&sol;strong><&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Consider list of numbers <strong>numbers &equals; &lpar;1&comma;2&comma;3&comma;4&comma;5&comma;6&comma;7&comma;8&comma;9&comma;10&rpar;&period;<&sol;strong> The requirement is to find the <strong>sum<&sol;strong> of all numbers&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<ol class&equals;"wp-block-list"><li>We will introduce an Interface <strong>Strategy<&sol;strong> and add an abstract method int <strong>sum&lpar;List&lt&semi;Integer&gt&semi; numbers&rpar;<&sol;strong><&sol;li><&sol;ol>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code>public interface Strategy &NewLine;&Tab;public int sum&lpar;List&lt&semi;Integer&gt&semi; numbers&rpar;&semi;&NewLine;&rcub;<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Then we will add a concrete class which will define the behaviour<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code>import java&period;util&period;List&NewLine;&NewLine;public class SummAll implements Strategy &lbrace;&NewLine;&Tab;&commat;Override&NewLine;&Tab;public int sum&lpar;List&lt&semi;Integer&gt&semi; numbers&rpar; &lbrace;&NewLine;&Tab;&Tab;int sum &equals; 0&semi;&NewLine;&Tab;&Tab;for &lpar;Integer num &colon; numbers&rpar; &lbrace;&NewLine;&Tab;&Tab;&Tab;sum &equals; sum&plus;num&semi;&NewLine;&Tab;&Tab;&rcub;&NewLine;&Tab;&Tab;return sum&semi;&NewLine;&Tab;&rcub;&NewLine;&rcub;<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">2&period; Now if we get a new requirement to get a sum of all even numbers then we need to add a new concrete class and need to define behaviour to get a sum of all even numbers&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code>import java&period;util&period;List&NewLine;&NewLine;&NewLine;public class SummAllEven implements Strategy &lbrace;&NewLine;&NewLine;&Tab;&commat;Override&NewLine;&Tab;public int sum&lpar;List&lt&semi;Integer&gt&semi; numbers&rpar; &lbrace;&NewLine;&Tab;&Tab;int sum &equals; 0&semi;&NewLine;&Tab;&Tab;for &lpar;Integer num &colon; numbers&rpar; &lbrace;&NewLine;&Tab;&Tab;&Tab;if &lpar;num &percnt; 2 &equals;&equals; 0&rpar; &lbrace;&NewLine;&Tab;&Tab;&Tab;&Tab;sum &equals; sum &plus; num&semi;&NewLine;&Tab;&Tab;&Tab;&rcub;&NewLine;&Tab;&Tab;&rcub;&NewLine;&Tab;&Tab;return sum&semi;&NewLine;&Tab;&rcub;&NewLine;&rcub;<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">For each such requirement&comma; we need to add a new concrete class and this will end up with a lot of classes&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Using Lambda we can solve this problem very easily&comma; let us implement the <strong>Strategy Pattern using Lambda&period;<&sol;strong><&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h3 class&equals;"wp-block-heading"><strong>Strategy Patterns using Lambda<&sol;strong><&sol;h3>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code>import java&period;util&period;Arrays&NewLine;import java&period;util&period;List&semi;&NewLine;import java&period;util&period;function&period;Predicate&semi;&NewLine;&NewLine;&NewLine;public class StrategyPatternWithLambda &lbrace;&NewLine;&Tab;public static int sum&lpar;final List&lt&semi;Integer&gt&semi; numbers&comma; final Predicate&lt&semi;Integer&gt&semi; selector&rpar; &lbrace;&NewLine;&Tab;&Tab;return numbers&period;stream&lpar;&rpar;&NewLine;&Tab;&Tab;&Tab;&Tab;&period;filter&lpar;selector&rpar;&NewLine;&Tab;&Tab;&Tab;&Tab;&period;mapToInt&lpar;Integer&colon;&colon;valueOf&rpar;&NewLine;&Tab;&Tab;&Tab;&Tab;&period;sum&lpar;&rpar;&semi;&NewLine;&Tab;&rcub;&NewLine;&Tab;&NewLine;&Tab;public static void main&lpar;String&&num;091&semi;&rsqb; args&rpar; &lbrace;&NewLine;&Tab;&Tab;List&lt&semi;Integer&gt&semi; numbers &equals; Arrays&period;asList&lpar;1&comma;2&comma;3&comma;4&comma;5&comma;6&comma;7&comma;8&comma;9&comma;10&rpar;&semi;&NewLine;&Tab;&Tab;&sol;&sol;Sum of all numbers&NewLine;&Tab;&Tab;int sumALl &equals; sum&lpar;numbers&comma;e-&gt&semi;true&rpar;&semi;&NewLine;&Tab;&Tab;&NewLine;&Tab;&Tab;&sol;&sol;Sum of all even numbers&NewLine;&Tab;&Tab;int sumALlEven &equals; sum&lpar;numbers&comma;e-&gt&semi;e&percnt;2&equals;&equals;0&rpar;&semi;&NewLine;&Tab;&Tab;&NewLine;&Tab;&Tab;&sol;&sol;Sum of all odd numbers&NewLine;&Tab;&Tab;int sumALlOdd &equals; sum&lpar;numbers&comma;e-&gt&semi;e&percnt;2&excl;&equals;0&rpar;&semi;&NewLine;&Tab;&Tab;&NewLine;&Tab;&Tab;&sol;&sol;Sum of all numbers greater thann 4&NewLine;&Tab;&Tab;int sumGt4 &equals; sum&lpar;numbers&comma;e-&gt&semi;e&gt&semi;4&rpar;&semi;&NewLine;&Tab;&rcub;&NewLine;&rcub;<&sol;code><&sol;pre>&NewLine;<div class&equals;"wp-post-navigation"> &NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab; <div class&equals;"wp-post-navigation-pre"> &NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab; <a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;decorator-pattern-using-lambda&sol;">Previous<&sol;a> &NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab; <&sol;div> &NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab; <div class&equals;"wp-post-navigation-next"> &NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab; &NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab; <&sol;div> &NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;<&sol;div>&NewLine;<script type&equals;"text&sol;javascript">&NewLine;jQuery&lpar;document&rpar;&period;ready&lpar;function&lpar;&dollar;&rpar; &lbrace;&NewLine; &dollar;&period;post&lpar;'https&colon;&sol;&sol;dineshonjava&period;com&sol;wp-admin&sol;admin-ajax&period;php'&comma; &lbrace;action&colon; 'mts&lowbar;view&lowbar;count'&comma; id&colon; '4640'&rcub;&rpar;&semi;&NewLine;&rcub;&rpar;&semi;&NewLine;<&sol;script>

Pankaj Singh

Specialties: java technologies : Spring, Microservices ,Hibernate, JPA, Apache Spark, Spring Batch, React Js, Maven and Kafka.

Share
Published by
Pankaj Singh

Recent Posts

Decorator Pattern using Lambda

Decorator Pattern A decorator pattern allows a user to add new functionality to an existing…

4 years ago

Delegating pattern using lambda

Delegating pattern In software engineering, the delegation pattern is an object-oriented design pattern that allows…

4 years ago

Spring Vs Django- Know The Difference Between The Two

Technology has emerged a lot in the last decade, and now we have artificial intelligence;…

4 years ago

TOP 20 MongoDB INTERVIEW QUESTIONS 2022

Managing a database is becoming increasingly complex now due to the vast amount of data…

4 years ago

Scheduler @Scheduled Annotation Spring Boot

Overview In this article, we will explore Spring Scheduler how we could use it by…

4 years ago

Configure Multiple Databases Spring JPA Spring Boot

Overview In this article, we will explore a simple Spring Boot application to implement a…

4 years ago