SYS-CON MEDIA Authors: Zakia Bouachraoui, Elizabeth White, Liz McMillan, Yeshim Deniz, William Schmarzo

Article

Revisitng Java SE 8 Features! @CloudExpo #Java #Cloud #OpenSource

A tutorial series on Java as we all eagerly await the official release of Java SE 9

I have provided some of the most important core language enhancements for JDK 8.0, along with code samples. The examples provided below can be directly pasted into your IDE and you may name the class as provided.




Lambda Expressions
Lambda Expression provide a newer way to refer to anonymous methods. It is more like a method interface providing the parameters accepted along with a method body. In a way, it solves the vertical problem - which leads to more maintainable code or lesser lines of code to achieve the same functionality.
 public class jdk8_LambdaExpressions {  
      public static void main(String[] args) {  
           Runnable r2 = () -> System.out.println("Son of God");  
           r2.run(); // note that this is not starting a thread  
      }  
 }  


Parallel Array Operations
Another powerful feature of JDK8 is that parallel operations are allowed on the same set of data. This is by creating stream out of the data. It is guaranteed to be faster if you have multiple processor cores on your system.
 import java.util.ArrayList;  
 import java.util.List;  
 import java.util.Random;  
 public class jdk8_ParallelArrayOperations {  
      static List<Project> projects = new ArrayList<Project>();  
      public static void main(String[] args) {  
           Project project = new Project();  
           project.setName("development");  
           projects.add(project);  
           project = new Project();  
           project.setName("testing");  
           projects.add(project);  
           project = new Project();  
           project.setName("build");  
           projects.add(project);  
           projects.stream().parallel().forEach(a->action(a));  
           for(Project p: projects) {  
                System.out.println(p.getName()+":"+p.getManager());  
           }  
      }  
      public static void action(Project x) {            
           int pmR=new Random().nextInt(1000);  
           x.setManager("john"+pmR);  
      }  
 }  

 class Project {  
      String name;  
      String manager;  
      public String getName() {  
           return name;  
      }  
      public void setName(String name) {  
           this.name = name;  
      }  
      public String getManager() {  
           return manager;  
      }  
      public void setManager(String manager) {  
           this.manager = manager;  
      }  
 }  


Method Parameter Reflection
Another nice feature, particularly useful when you are using Reflection and Debugging large amount of code - You would want additional introspection on the real parameter names. By compiling the code with JDK8 using the following command, we enable this feature. Note that it will lead to use of additional memory/bytecode size.
 javac -parameters jdk8_MethodParameterReflection.java   

The following method illustrates the use of Method Parameter Reflection in a Java Program.
 import java.lang.reflect.Method;  
 import java.lang.reflect.Parameter;  

 public class jdk8_MethodParameterReflection {  
      public static void main(String[] args) {            
           Class<BlackHat> clazz = BlackHat.class;  
           for(Method m: clazz.getDeclaredMethods()) {  
                for(Parameter p: m.getParameters()) {  
                     System.out.println(p.getName());  
                }  
           }  
      }  
 }  
 class BlackHat {       
      public void payload(String hostName, int hostPort, boolean howdy) {            
           System.out.println("i can do something");  
      }  
 }  


Repeating Annotations
Prior to JDK8, there was no easy way to manage repeating annotations, other than the user or the developer providing custom ways to handle them. With JDK8, one is allowed to define the same annotation more than once. You may place the following code under the package 'jdk8.features'.
 package jdk8.features;  
 import java.lang.annotation.Repeatable;  
 import java.lang.annotation.Retention;  
 import java.lang.annotation.RetentionPolicy;  
 @Retention( RetentionPolicy.RUNTIME )  
 @Repeatable(value = jdk8_RepeatableAnnotationsSources.class)  
 public @interface jdk8_RepeatableAnnotationsSource {  
      String version() default "";       
 }  

Now, you can define the Annotation that you had mentioned
as the value for the '@Repeatable' Annotation. You may place the following code under the package 'jdk8.features'.
 package jdk8.features;  
 import java.lang.annotation.Retention;  
 import java.lang.annotation.RetentionPolicy;  
 @Retention(RetentionPolicy.RUNTIME)  
 public @interface jdk8_RepeatableAnnotationsSources {  
      jdk8_RepeatableAnnotationsSource[] value();  
 }  

You can use Repeatable Annotations as follows. Also, you can use any of the methods getAnnotation() or getAnnotationsByType() to parse the annotation and process them.
 import jdk8.features.jdk8_RepeatableAnnotationsSource;  
 import jdk8.features.jdk8_RepeatableAnnotationsSources;  

 @jdk8_RepeatableAnnotationsSource(version = "jdk5")  
 @jdk8_RepeatableAnnotationsSource(version = "jdk6")  
 @jdk8_RepeatableAnnotationsSource(version = "jdk7")  
 public class jdk8_RepeatableAnnotations {  
      public static void main(String[] args) {  
           Class<jdk8_RepeatableAnnotations> clazz = jdk8_RepeatableAnnotations.class;  
           jdk8_RepeatableAnnotationsSources sources1 = clazz.  
                     getAnnotation(jdk8_RepeatableAnnotationsSources.class);            
           jdk8_RepeatableAnnotationsSource[] sources2 = clazz.  
                     getAnnotationsByType(jdk8_RepeatableAnnotationsSource.class);  
           for(jdk8_RepeatableAnnotationsSource source: sources1.value()) {  
                System.out.println(source.version());  
           }  
           for(jdk8_RepeatableAnnotationsSource source: sources2) {  
                System.out.println(source.version());  
           }  
      }  
 }  


Method References

Method References are like Lambda Expressions, except that they allow to specify or refer to the existing method by name. The operator to refer to an existing method name is :: You may place the following code under the package 'jdk8.features'.
 package jdk8.features;  
 public class jdk8_MethodReferencesVO {  
      Integer age;  
      String name;  
      public Integer getAge() {  
           return age;  
      }  
      public void setAge(Integer age) {  
           this.age = age;  
      }  
      public String getName() {  
           return name;  
      }  
      public void setName(String name) {  
           this.name = name;  
      }  
 }  

Note the usage below of Method References. There can be four types of references to methods, including:
  • Reference to a static method [ContainingClass::staticMethodName]
  • Reference to an instance method [containingObject::instanceMethodName]
  • Reference to a constructor [ClassName::new]
  • Reference to an instance method [ContainingType::methodName {Arbitary Object}]
 import java.util.Arrays;  
 import jdk8.features.jdk8_MethodReferencesVO;  

 public class jdk8_MethodReferences {  
   public int compareByName(jdk8_MethodReferencesVO a, jdk8_MethodReferencesVO b) {  
     return a.getName().compareTo(b.getName());  
   } 
 
   public int compareByAge(jdk8_MethodReferencesVO a, jdk8_MethodReferencesVO b) {  
     return a.getAge().compareTo(b.getAge());  
   }
  
   public static void main(String[] args) {  
           jdk8_MethodReferencesVO[] refs = new jdk8_MethodReferencesVO[5];  
           jdk8_MethodReferencesVO vo1=new jdk8_MethodReferencesVO();  
           vo1.setAge(21);  
           vo1.setName("Frank");  
           refs[0]=vo1;  
           vo1=new jdk8_MethodReferencesVO();  
           vo1.setAge(22);  
           vo1.setName("Ibrahim");  
           refs[1]=vo1;  
           vo1=new jdk8_MethodReferencesVO();  
           vo1.setAge(24);  
           vo1.setName("Vinod");  
           refs[2]=vo1;  
           vo1=new jdk8_MethodReferencesVO();  
           vo1.setAge(19);  
           vo1.setName("Gurdeep");  
           refs[3]=vo1;  
           vo1=new jdk8_MethodReferencesVO();  
           vo1.setAge(25);  
           vo1.setName("Maxovitch");  
           refs[4]=vo1;  
           jdk8_MethodReferences refC = new jdk8_MethodReferences();  
           Arrays.sort(refs, refC::compareByAge);  
           for(jdk8_MethodReferencesVO rvo: refs) {  
                System.out.println(rvo.getAge()+":"+rvo.getName());  
           }  
      }  
 }  


Happy Life with JDK8!

More Stories By Sumith Kumar Puri

Sumith Kumar Puri, an author (Java/JEE) at Packt Publishing, has close to 14 years of experience in entrepreneurship, conceptualization, architecture, design and development of software products and solutions. He also holds multiple certifications in Core Java, JEE, C, C++, Algorithms and Data Structures. He is an open source contributor and likes competitive programming and hackathons. He has 11 publications to his name in international and national conferences, journals and magazines. He is an active member of the IEEE/Computer Society, ACM and CSI.

He holds a Bachelor of Engineering [Information Science and Engineering] from Sri Revana Siddeshwara Institute of Technology, Bangalore, India. He has also completed the Executive Programme [Data Mining and Analytics] from the Indian Institute of Technology, Roorkee, India and the Executive Certificate Programme [Entrepreneurship] from the Indian Institute of Management, Kashipur, India. His current interests are in data mining, machine learning, Big Data and artificial intelligence. He is based out of Bangalore, India.

Latest Stories
Lori MacVittie is a subject matter expert on emerging technology responsible for outbound evangelism across F5's entire product suite. MacVittie has extensive development and technical architecture experience in both high-tech and enterprise organizations, in addition to network and systems administration expertise. Prior to joining F5, MacVittie was an award-winning technology editor at Network Computing Magazine where she evaluated and tested application-focused technologies including app secu...
CloudEXPO | DevOpsSUMMIT | DXWorldEXPO Silicon Valley 2019 will cover all of these tools, with the most comprehensive program and with 222 rockstar speakers throughout our industry presenting 22 Keynotes and General Sessions, 250 Breakout Sessions along 10 Tracks, as well as our signature Power Panels. Our Expo Floor will bring together the leading global 200 companies throughout the world of Cloud Computing, DevOps, IoT, Smart Cities, FinTech, Digital Transformation, and all they entail. As ...
Atmosera delivers modern cloud services that maximize the advantages of cloud-based infrastructures. Offering private, hybrid, and public cloud solutions, Atmosera works closely with customers to engineer, deploy, and operate cloud architectures with advanced services that deliver strategic business outcomes. Atmosera's expertise simplifies the process of cloud transformation and our 20+ years of experience managing complex IT environments provides our customers with the confidence and trust tha...
Only Adobe gives everyone - from emerging artists to global brands - everything they need to design and deliver exceptional digital experiences. Adobe Systems Incorporated develops, markets, and supports computer software products and technologies. The Company's products allow users to express and use information across all print and electronic media. The Company's Digital Media segment provides tools and solutions that enable individuals, small and medium businesses and enterprises to cre...
Digital Transformation (DX) is a major focus with the introduction of DXWorldEXPO within the program. Successful transformation requires a laser focus on being data-driven and on using all the tools available that enable transformation if they plan to survive over the long term. A total of 88% of Fortune 500 companies from a generation ago are now out of business. Only 12% still survive. Similar percentages are found throughout enterprises of all sizes. We are offering early bird savings...
Cloud-enabled transformation has evolved from cost saving measure to business innovation strategy -- one that combines the cloud with cognitive capabilities to drive market disruption. Learn how you can achieve the insight and agility you need to gain a competitive advantage. Industry-acclaimed CTO and cloud expert, Shankar Kalyana presents. Only the most exceptional IBMers are appointed with the rare distinction of IBM Fellow, the highest technical honor in the company. Shankar has also receive...
In his keynote at 19th Cloud Expo, Sheng Liang, co-founder and CEO of Rancher Labs, discussed the technological advances and new business opportunities created by the rapid adoption of containers. With the success of Amazon Web Services (AWS) and various open source technologies used to build private clouds, cloud computing has become an essential component of IT strategy. However, users continue to face challenges in implementing clouds, as older technologies evolve and newer ones like Docker c...
CloudEXPO | DevOpsSUMMIT | DXWorldEXPO Silicon Valley 2019 will cover all of these tools, with the most comprehensive program and with 222 rockstar speakers throughout our industry presenting 22 Keynotes and General Sessions, 250 Breakout Sessions along 10 Tracks, as well as our signature Power Panels. Our Expo Floor will bring together the leading global 200 companies throughout the world of Cloud Computing, DevOps, IoT, Smart Cities, FinTech, Digital Transformation, and all they entail.
Daniel Jones is CTO of EngineerBetter, helping enterprises deliver value faster. Previously he was an IT consultant, indie video games developer, head of web development in the finance sector, and an award-winning martial artist. Continuous Delivery makes it possible to exploit findings of cognitive psychology and neuroscience to increase the productivity and happiness of our teams.
Yottabyte is a software-defined data center (SDDC) company headquartered in Bloomfield Township, Oakland County, Michigan. The mission of Yottabyte is to enable any organization to easily and economically realize the benefits of the cloud in their own datacenter. The Yottabyte Cloud Software natively virtualizes compute, storage, and network resources into a resilient, automated software-defined cloud infrastructure solution. Both Enterprise IT customers and Service Providers benefit from Yottab...
Eric Taylor, a former hacker, reveals what he's learned about cybersecurity. Taylor's life as a hacker began when he was just 12 years old and playing video games at home. Russian hackers are notorious for their hacking skills, but one American says he hacked a Russian cyber gang at just 15 years old. The government eventually caught up with Taylor and he pleaded guilty to posting the personal information on the internet, among other charges. Eric Taylor, who went by the nickname Cosmo...
DevOpsSUMMIT at CloudEXPO, to be held June 25-26, 2019 at the Santa Clara Convention Center in Santa Clara, CA – announces that its Call for Papers is open. Born out of proven success in agile development, cloud computing, and process automation, DevOps is a macro trend you cannot afford to miss. From showcase success stories from early adopters and web-scale businesses, DevOps is expanding to organizations of all sizes, including the world's largest enterprises – and delivering real results. Am...
Every organization is facing their own Digital Transformation as they attempt to stay ahead of the competition, or worse, just keep up. Each new opportunity, whether embracing machine learning, IoT, or a cloud migration, seems to bring new development, deployment, and management models. The results are more diverse and federated computing models than any time in our history. Unfortunately, there is no single deployment model that solves all of your business goals. You need to maintain the fl...
The benefits of automated cloud deployments for speed, reliability and security are undeniable. The cornerstone of this approach, immutable deployment, promotes the idea of continuously rolling safe, stable images instead of trying to keep up with managing a fixed pool of virtual or physical machines. In this talk, we'll explore the immutable infrastructure pattern and how to use continuous deployment and continuous integration (CI/CD) process to build and manage server images for any platfo...
Automation is turning manual or repetitive IT tasks into a thing of the past-including in the datacenter. Nutanix not only provides a world-class user interface, but also a comprehensive set of APIs to allow the automation of provisioning, data collection, and other tasks. In this session, you'll explore Nutanix APIs-from provisioning to other Day 0, Day 1 operations. Come learn about how you can easily leverage Nutanix APIs for orchestration and automation of infrastructure, VMs, networking, an...