Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /usr/home/shadbb/domains/czub.info/public_html/wp-content/plugins/wp-syntax/wp-syntax.php on line 383

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()));
 
    }
}