In this post, some of the new features of JAVA 8…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
package pt.joaobrito.java8; import java.time.Duration; import java.time.Instant; import java.time.LocalDate; import java.time.Month; import java.time.Period; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.Optional; public class Main { public static void main(String[] args) throws InterruptedException { // simple lambda example print("Hello Lambda", s -> s.length()); // another lambda example new Thread(() -> System.out.println("Hello Runnable")).start(); List<Person> people = new ArrayList<>(Arrays.asList( new Person("John Doe", LocalDate.of(1978, Month.JUNE, 14)), new Person("Jane Doe", LocalDate.of(1983, Month.FEBRUARY, 16)), new Person("Steven Smith", LocalDate.of(2008, Month.SEPTEMBER, 23)), new Person("Martin", LocalDate.of(2010, Month.NOVEMBER, 27)), new Person("Mike", LocalDate.of(2012, Month.NOVEMBER, 3)), new Person("Louis", LocalDate.of(2014, Month.NOVEMBER, 6)), new Person("Mary", LocalDate.of(2016, Month.FEBRUARY, 16)) )); System.out.println("---- All people sorted by name -----"); people.sort((p1, p2) -> p1.getName().compareTo(p2.getName())); people.forEach(p -> System.out.println(p.getName())); System.out.println("---- All people -----"); people = new ArrayList<>(Arrays.asList( new Person("John Doe", LocalDate.of(1978, Month.JUNE, 14)), new Person("Jane Doe", LocalDate.of(1983, Month.FEBRUARY, 16)), new Person("Steven Smith", LocalDate.of(2008, Month.SEPTEMBER, 23)), new Person("Martin", LocalDate.of(2010, Month.NOVEMBER, 27)), new Person("Mike", LocalDate.of(2012, Month.NOVEMBER, 3)), new Person("Louis", LocalDate.of(2014, Month.NOVEMBER, 6)), new Person("Mary", LocalDate.of(2016, Month.FEBRUARY, 16)) )); people.stream().map(Person::getName).forEach(System.out::println); // using method reference System.out.println("---- People older than 9 yrs -----"); people .stream() // convert to stream .filter(p -> Period.between(p.getDob(), LocalDate.now()).getYears() > 9) // get only the people thaht matches the given condition .map(Person::getName) // get a new stream with only the names => returns Stream<String> .forEach(System.out::println); // iterates the entire stream and prints out each element System.out.println("---- Remove items from list -----"); people.removeIf(i -> i.getAge() < 2); // remove if the given condition is true people. stream() .map(Person::getName) .sorted(Comparator.reverseOrder()) // order the list in reverse order .forEach(System.out::println); // calculate time between two dates LocalDate dob = LocalDate.of(1978, 6, 14); LocalDate now = LocalDate.now(); Period p = Period.between(dob, now); System.out.println("Priod of " + p.getYears() + " years; " + p.getMonths() + " months, " + p.getDays() + " days."); // calculate time between two instants Instant start = Instant.now(); Thread.sleep(1000); Instant end = Instant.now(); System.out.println("The time is... " + Duration.between(start, end).toMillis()); // Optional<T> Optional<String> opt = Optional.ofNullable("some string"); // not null value System.out.println(opt.orElse("or else")); opt.orElseThrow(UnsupportedOperationException::new); opt = Optional.ofNullable(null); // notice that here we pass a null value System.out.println(opt.orElse("or else")); opt.orElseThrow(UnsupportedOperationException::new); } public static void print(String s, MyLambda l) { System.out.println(l.getLength(s)); } } @FunctionalInterface interface MyLambda { int getLength(String s); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
package pt.joaobrito.java8; import java.time.LocalDate; import java.time.Period; public class Person { private String name; private LocalDate dob; public Person(String name, LocalDate dob) { this.name = name; this.dob = dob; } public String getName() { return name; } public void setName(String name) { this.name = name; } public LocalDate getDob() { return dob; } public void setDob(LocalDate dob) { this.dob = dob; } public int getAge(){ return Period.between(dob, LocalDate.now()).getYears(); } } |
…and here are the results from running the file above
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
------------------------------------------------------------------------ Building Java8 0.0.1-SNAPSHOT ------------------------------------------------------------------------ --- exec-maven-plugin:1.2.1:exec (default-cli) @ Java8 --- 12 Hello Runnable ---- All people sorted by name ----- Jane Doe John Doe Louis Martin Mary Mike Steven Smith ---- All people ----- John Doe Jane Doe Steven Smith Martin Mike Louis Mary ---- People older than 9 yrs ----- John Doe Jane Doe ---- Remove items from list ----- Steven Smith Mike Mary Martin Louis John Doe Jane Doe Priod of 39 years; 9 months, 9 days. The time is... 1014 some string or else Exception in thread "main" java.lang.UnsupportedOperationException at java.util.Optional.orElseThrow(Optional.java:290) at pt.joaobrito.java8.Main.main(Main.java:83) ------------------------------------------------------------------------ BUILD FAILURE ------------------------------------------------------------------------ Total time: 1.649 s Finished at: 2018-03-23T00:07:33+00:00 Final Memory: 8M/309M ------------------------------------------------------------------------ |
Note that the build fails because we pass null to the Optional and we have a condition to throw an exception if null is passed to it (this is the reason why this line is the last statement of this example).
Thank you! 🙂