Wczoraj zainstalowałem JDK8 i NetBeans 8, nowe ficzery po pierwszych przymiarkach pokazują „moc”. Pozwalają na przyśpieszenie pisania, podobnie jak kolekcje w Scali. Nie ma co czarować, chłopaki z Oracla podglądają konkurencję (C#, Scale, Akka, itd.) i implementują pewne rozwiązania. Jedyna wada, że narazie nie można lambdy i streama wykorzystać bez kombinacji (na GitHubie jest już ficzer pozwalający na rekompilacje bytecodu javy 8 do javy 7) pod Androidem. Bytecode jest nie zgodny, no cóż patenty …
Poniżej pierwsze próby ficzerów Javy 8
package net.shad.lernjava8; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author Jarek */ public class Java8FilterTest { private class User { private String login; private String email; private int age; public User(String login, String email, int age){ this.login=login; this.email=email; this.age=age; } @Override public String toString(){ return "User{" + "login=" + login + ", email=" + email + ", age=" + age + '}'; } }; /** * @param args the command line arguments */ public static void main(String[] args){ Java8FilterTest l=new Java8FilterTest(); l.userList(); l.timeMap(); } /** * Przykład filtrowania danych na liście */ public void userList(){ List<Java8FilterTest.User> users=Arrays.asList( new Java8FilterTest.User("login1", "email1", 20), new Java8FilterTest.User("login2", "email2", 32), new Java8FilterTest.User("login3", "email3", 38), new Java8FilterTest.User("login4", "email4", 62), new Java8FilterTest.User("login5_hack", "email5", 102), new Java8FilterTest.User("login6", "email6", 65), new Java8FilterTest.User("login7_hack", "email7", 15), new Java8FilterTest.User("login8", "email8", 25), new Java8FilterTest.User("login9", "email9", 45) ); System.out.println("================================="); System.out.println(" List Test"); System.out.println("================================="); // // Szukanie userków w wieku 20 - 40 lat // System.out.println("Users age between 20 and 40 years"); users .stream() .filter(u -> u.age >= 20 && u.age <= 40) .forEach(u -> System.out.println(u)); // // Szukanie tych którzy mają w loginie "hack" // System.out.println("Users login contains word"hack""); users .stream() .filter(u -> u.login.contains("hack")) .forEach(u -> System.out.println(u)); } /** * Testowanie operacji filtrowania na Mapie */ public void timeMap(){ System.out.println("================================="); System.out.println(" Map Test"); System.out.println("================================="); Map<String, Long> timesMap=new HashMap<>(); try { for (int i=0; i < 100; i++){ timesMap.put("idx_" + i, System.currentTimeMillis()); Thread.sleep(3); } } catch (InterruptedException ex) { Logger.getLogger(Java8FilterTest.class.getName()).log(Level.SEVERE, null, ex); } // // Liczenie elementów w kolekcji // long count=timesMap.entrySet() .stream() .count(); System.out.println("Count count: " + count); // // Wyszukanie pierwszego elementu listy // Optional<Map.Entry<String, Long>> findFirst=timesMap.entrySet() .stream() .findFirst(); System.out.println("Find first: " + findFirst); // // Filtrowanie danych // (tutaj wybieramy elementy którch czas powstania jest wartością parzystą (modulo 2)) // System.out.println("Timestamp is a even number"); timesMap.entrySet() .stream() .filter(x -> x != null) .filter(x -> x.getValue() % 2 == 0) .forEach(x -> System.out.println(x.getKey() + " -> " + x.getValue())); } } |
Możliwość komentowania jest wyłączona.