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 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 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 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> 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.