- Download a JDK 8 snapshot from https://jdk8.java.net/ and install it.
- Install a version of Eclipse that can handle Java 8 syntax. I downloaded Eclipse Luna 4.4 from http://downloads.efxclipse.org/eclipse-java8/2013-05-19/.
To get started, create a new project in Eclipse and make sure you have chosen the Java 8 JRE.
Here's a class that uses a lambda expression to instantiate the functional interface PowerCalculator. A functional interface is an interface with only one abstract method.
public class TestClass { interface PowerCalculator { int pow(int n, int exponent); } public static void main(final String[] args) { final PowerCalculator calc = (int n, final int exponent) -> { return (int) Math.pow(n, exponent); }; int product = calc.pow(3, 4); System.out.println(product); } } |
This outputs the expected "81".
That was maybe not very cool, but when looking into the more functional style of programming you can do with lambda expressions, this is the most interesting Java upgrade since Java 5 in my opinion.
I wrote an article in 2012 on FP in Java http://macgyverdev.blogspot.se/2012/10/functional-programming-in-java.html and took a quick look now again to see whether the original spec still is valid.
Here is a few examples I tried on the Collections framework. There has been changes since the 2012 draft. For example is the stream() interface added, previously you could do a filter() directly on the collection. The stream interface allows for parallel execution and
I wrote an article in 2012 on FP in Java http://macgyverdev.blogspot.se/2012/10/functional-programming-in-java.html and took a quick look now again to see whether the original spec still is valid.
Here is a few examples I tried on the Collections framework. There has been changes since the 2012 draft. For example is the stream() interface added, previously you could do a filter() directly on the collection. The stream interface allows for parallel execution and
public class TestClass { public static void main(final String[] args) { List<Animal> animals = Arrays.asList(new Animal(10), new Animal(20), new Animal(30), new Animal(40)); // Each animal eats another calorie animals.forEach(a -> a.eat(1)); // Print animal animals.forEach(a -> a.print()); // Print only the animals which have more than 30 calories animals.stream() .filter(a -> a.nutrition() > 30) .forEach(a -> a.print()); // Calculate total sum of all animals calories int sum = animals.stream() .mapToInt(a -> a.nutrition()) .sum(); } } class Animal { private int calories = 0; public Animal(int calories) { this.calories = calories; } public void eat(int calories) { this.calories += calories; } public void print() { System.out.println("Calories: " + calories); } public int nutrition() { return calories; } }
The Eclipse support in Luna 4.4 is pretty good. But when using the command completition it is not obvious what the different lamda expression consumers expect. I guess once you have played around with it some more you get accustomed to the Predicate and Consumer APIs.
I always appreciated your work, your creation is definitely unique. Great job
ReplyDeleterasmussen student portal
Nice post thanks for sharinng
ReplyDeletekuşadası
ReplyDeletesakarya
sinop
bolu
burdur
Q0R6