zoukankan      html  css  js  c++  java
  • [转]Java8 lambda表达式及新特新

    分享自:Vincent

    package info.liuwenjun.test;
    
    import org.junit.Test;
    
    import java.util.*;
    import java.util.function.*;
    import java.util.stream.Collectors;
    
    
    /**
     * Created by Vincent on 2016-04-12.
     */
    public class TestJava8 {
    
        private void print(Object obj) {
            System.out.println(obj);
        }
    
        @Test
        public void sort() {
            List<String> names = Arrays.asList("peter", "anna", "mike", "xenia");
    
            Collections.sort(names, new Comparator<String>() {
                @Override
                public int compare(String a, String b) {
                    return a.compareTo(b);
                }
            });
    
            Collections.sort(names, (String a, String b) -> {
                return a.compareTo(b);
            });
    
            Collections.sort(names, (String a, String b) -> a.compareTo(b));
    
            Collections.sort(names, (a, b) -> a.compareTo(b));
    
            print(names);
    
            new Thread(new Runnable() {
                @Override
                public void run() {
                    System.out.println("inner class");
                }
            }).start();
    
            new Thread(() -> System.out.println("lambda")).start();
        }
    
        @Test
        public void typeDeduction() {
            Function<Integer, String> intToStr = a -> a.toString();
    
            Function<Double, String> doubleToStr = a -> a.toString();
    
            // doubleToStr = intToStr;
    
            // () -> print("typeDeduction");
            ((Action) () -> print("typeDeduction")).action();
        }
    
        @FunctionalInterface
        private interface Action {
            void action();
        }
    
        @Test
        public void functionalInterface() {
            Function<Integer, Integer> plusOne = i -> i + 1;
            print(plusOne.apply(1));
    
            Predicate<Character> emoticon = o->'皿'<-o;
            print(emoticon.test('皿'));
    
            Consumer<Integer> printInt = i -> print(i);
            printInt.accept(1);
    
            Supplier<Long> getCurrentTime = () -> System.currentTimeMillis();
            print(getCurrentTime.get());
    
            Action sayHello = () -> print("hello");
            sayHello.action();
        }
    
        @Test
        public void testThis() {
            Action innerClass = new Action() {
                @Override
                public void action() {
                    this.print("testThis");
                }
    
                private void print(Object obj) {
                    System.out.println("Inner: " + obj);
                }
            };
            innerClass.action();
    
            Action lambda = () -> this.print("testThis");
            lambda.action();
        }
    
        @Test
        public void testFinal() {
            final int finalVar = 0;
            int effectivelyFinalVar = 0;
            // effectivelyFinalVar = 1;
    
            new Action() {
                @Override
                public void action() {
                    print(finalVar);
                    print(effectivelyFinalVar);
                }
            }.action();
        }
    
    
    
        private List<String> stringCollection = new ArrayList<String>() {
            {
                add("ddd2");
                add("aaa2");
                add("bbb1");
                add("aaa1");
                add("bbb3");
                add("ccc");
                add("bbb2");
                add("ddd1");
            }
        };
    
        @Test
        public void filter() {
            stringCollection
                    .stream()
                    .filter(s -> s.startsWith("a"))
                    .forEach(s -> print(s));
        }
    
        @Test
        public void sorted() {
            stringCollection
                    .stream()
                    .sorted((a, b) -> b.compareTo(a))
                    .filter(s -> s.startsWith("a"))
                    .forEach(s -> print(s));
        }
    
        @Test
        public void map() {
            stringCollection
                    .stream()
                    .map(s -> s.toUpperCase())
                    .sorted(Comparator.comparing(s -> s.length()))
                    .forEach(s -> print(s));
        }
    
        @Test
        public void flatMap() {
            stringCollection
                    .stream()
                    .filter(s -> s.startsWith("a"))
                    .flatMap(s -> Arrays.stream(s.split("")))
                    .forEach(c -> print(c));
        }
    
        @Test
        public void match() {
            print(stringCollection.stream().anyMatch(s -> s.startsWith("a")));
    
            print(stringCollection.stream().allMatch(s -> s.startsWith("a")));
    
            print(stringCollection.stream().noneMatch(s -> s.startsWith("z")));
        }
    
        @Test
        public void count() {
            print(stringCollection.stream().filter(s -> s.startsWith("b")).count());
        }
    
        @Test
        public void reduce() {
            Optional<Integer> optional = stringCollection
                    .stream()
                    .map(s -> s.length())
                    .reduce((a, b) -> a + b);
            print(optional.get());
    
            int sum = stringCollection.get(0).length();
            for (int i = 1; i < stringCollection.size(); i++) {
                sum = sum + stringCollection.get(i).length();
            }
            print(sum);
        }
    
        @Test
        public void intStream() {
            IntSummaryStatistics statistics = stringCollection
                    .stream()
                    .mapToInt(s -> s.length())
                    .summaryStatistics();
            print(statistics.getAverage());
            print(statistics.getSum());
            print(statistics.getMax());
            print(statistics.getMin());
            print(statistics.getCount());
        }
    
        @Test
        public void complex() {
            stringCollection
                    .stream()
                    .sorted()
                    .filter(s -> s.startsWith("a") && s.endsWith("1"))
                    .map(s -> s.length())
                    .filter(i -> i == 4)
                    .forEach(i -> print(i));
        }
    
        @Test
        public void toList() {
            List<Integer> len = stringCollection.stream().map(s -> s.length()).collect(Collectors.toList());
            print(len);
        }
    
        @Test
        public void toMap() {
            Map<String, Integer> len = stringCollection.stream().collect(Collectors.toMap(s -> s, s -> s.length()));
            print(len);
        }
    
        @Test
        public void groupingBy() {
            Map<Integer, List<String>> groups = stringCollection
                    .stream()
                    .collect(Collectors.groupingBy(s -> s.length()));
            print(groups);
        }
    
        @Test
        public void complexCollect() {
            Map<Integer, List<String>> groups = stringCollection
                    .stream()
                    .collect(Collectors.groupingBy(s -> s.length(),
                            Collectors.mapping(s -> s.toUpperCase(), Collectors.toList())));
            print(groups);
        }
    
        @Test
        public void removeIf() {
            List<String> copy = new ArrayList<>(stringCollection);
    
            stringCollection.removeIf(s -> s.startsWith("a"));
            print(stringCollection);
    
            Iterator<String> iter = copy.iterator();
            while (iter.hasNext()) {
                if(iter.next().startsWith("a")) {
                    iter.remove();
                }
            }
            print(copy);
        }
    
        @Test
        public void iterateMap() {
            Map<String, Integer> map = stringCollection.stream().collect(Collectors.toMap(s -> s, s -> s.length()));
    
            map.forEach((key, value) -> print(key + ": " + value));
    
            print("---------");
    
            for(Map.Entry entry : map.entrySet()) {
                print(entry.getKey() + ": " + entry.getValue());
            }
        }
    
        @Test
        public void mapStream() {
            Map<String, Integer> map = stringCollection.stream().collect(Collectors.toMap(s -> s, s -> s.length()));
    
            map.entrySet()
                    .stream()
                    .filter(e -> e.getValue() == 4)
                    .forEach(e -> print(e.getKey() + ": " + e.getValue()));
        }
    }
  • 相关阅读:
    html部分
    elementUi 新建和编辑dialog-input无法输入的小坑
    js array methods
    css-渐变背景,爱了爱了。
    css-iview官网布局
    10、TypeScript中的装饰器
    常见的预制注解
    javadoc工具
    元注解
    注解的概念
  • 原文地址:https://www.cnblogs.com/ieayoio/p/5396135.html
Copyright © 2011-2022 走看看