天天看点

jdk1.8的lambda表达式的简单例子

package model;

import java.text.SimpleDateFormat;

import java.util.Date;

public class Person implements Cloneable{

    private String name;

    private int    age;

    private double salary;

    private Date  birthday;

    public Person() {

    }

    public Person(String name, int age, double salary, Date birthday) {

        this.name = name;

        this.age = age;

        this.salary = salary;

        this.birthday = birthday;

    }

    public Person(String name, int age, double salary) {

        this.name = name;

        this.age = age;

        this.salary = salary;

    }

    public Person(String name, int age) {

        this.name = name;

        this.age = age;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public int getAge() {

        return age;

    }

    public void setAge(int age) {

        this.age = age;

    }

    public double getSalary() {

        return salary;

    }

    public void setSalary(double salary) {

        this.salary = salary;

    }

    public Date getBirthday() {

        return birthday;

    }

    public void setBirthday(Date birthday) {

        this.birthday = birthday;

    }

    @Override

    public boolean equals(Object obj) {

        if(obj instanceof Person){

            Person comparePerson=(Person)obj;

            return this.age==comparePerson.getAge();

        }

        return false;

    }

    @Override

    public Object clone() throws CloneNotSupportedException {

        return super.clone();

    }

    @Override

    public String toString() {

        SimpleDateFormat format=new SimpleDateFormat("YYYY-MM-dd");

        String finalBirthday="";

        if(this.getBirthday()!=null){

            finalBirthday=format.format(birthday);

        }

        return "Person [name=" + name + ", age=" + age + ", salary=" + salary + ", birthday="

               + finalBirthday + "]";

    }

}

package stream;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.Comparator;

import java.util.IntSummaryStatistics;

import java.util.List;

import java.util.Map;

import java.util.OptionalDouble;

import java.util.Set;

import java.util.TreeSet;

import java.util.stream.Collectors;

import model.Person;

import com.google.common.collect.Lists;

import com.google.common.collect.Maps;

public class StreamTest {

    public static void init(List<Person> persons) {

        Person person = new Person();

        person.setAge(15);

        person.setName("yy");

        Person person1 = new Person();

        person1.setAge(12);

        person1.setName("lisi");

        Person person2 = new Person();

        person2.setAge(12);

        person2.setName("zangwu");

        persons.add(person);

        persons.add(person1);

        persons.add(person2);

    }

    public static void printPerson(List<Person> persons) {

        persons.stream().forEach((o) -> System.out.println(o.getAge() + "--" + o.getName()));

    }

    public static void printPersonInfo(List<PersonInfo> persons) {

        persons.stream().forEach((o) -> System.out.println(o.getAge() + "--" + o.getName()));

    }

    public static void main(String[] args) {

        List<Person> persons = Lists.newArrayList();

        init(persons);

        printPerson(persons);

        System.out.println("---------------");

        List<Person> ageFilter = persons.stream().filter((o) -> o.getAge() > 11)

            .collect(Collectors.toList());

        printPerson(ageFilter);

        System.out.println("---------------");

        List<Person> sortPerson = persons.stream().sorted(sortByRule())

            .collect(Collectors.toList());

        printPerson(sortPerson);

        System.out.println("---------------");

        List<PersonInfo> personInfos = persons.stream().map(o -> convertToPersonInfo(o))

            .collect(Collectors.toList());

        printPersonInfo(personInfos);

        System.out.println("---------------");

        List<Person> limitPersons = persons.stream().filter((o) -> o.getAge() > 11).limit(1)

            .collect(Collectors.toList());

        printPerson(limitPersons);

        System.out.println("---------------");

        int ageCount = persons.stream().mapToInt(Person::getAge).sum();

        System.out.println("所有人的年龄的和" + ageCount);

        System.out.println("---------------");

        //针对persons集合进行虚拟分页功能

        int pageSize = 2;

        int pageNum = 1;

        int size = persons.size();

        int from = (pageNum - 1) * pageSize;

        int to = pageNum * pageSize;

        if (size > from) {

            List<Person> subListPerson = persons.subList(from, Math.min(to, size)).stream()

                .collect(Collectors.toList());

            printPerson(subListPerson);

        }

        System.out.println("---------------");

        List<Person> skipPersons = persons.stream().skip(1).collect(Collectors.toList());

        printPerson(skipPersons);

        System.out.println("---------------");

        OptionalDouble average = persons.stream().mapToInt(Person::getAge).distinct().average();

        System.out.println(average.getAsDouble());

        System.out.println("---------------");

        List<Integer> aa = Lists.newArrayList();

        aa.add(1);

        aa.add(1);

        aa.add(2);

        aa.add(3);

        aa.add(0);

        int aaListSize = (int) aa.stream().distinct().count();

        System.out.println(aaListSize);

        System.out.println("---------------");

        Map<String, Integer> personInfos1 = persons.stream().map(o -> convertToPersonInfo(o))

            .collect(Collectors.toMap(PersonInfo::getName, PersonInfo::getAge));

        System.out.println(personInfos1);

        System.out.println("---------------");

        List<Map<String, Integer>> personMap = persons.stream().map(o -> convertPersonTo(o))

            .collect(Collectors.toList());

        System.out.println(personMap);

        System.out.println("---------------");

        Person p = persons.stream().findFirst().get();

        System.out.println(p);

        System.out.println("---------------");

        //集合最小

        int min = (int) aa.stream().min((p1, p2) -> p1 - p2).get();

        System.out.println(min);

        System.out.println("---------------");

        //集合最大

        int max = (int) aa.stream().max((p1, p2) -> p1 - p2).get();

        System.out.println(max);

        System.out.println("---------------");

        //集合最大

        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        IntSummaryStatistics stats = numbers.stream().mapToInt((x) -> x).summaryStatistics();

        System.out.println("List中最大的数字 : " + stats.getMax());

        System.out.println("List中最小的数字 : " + stats.getMin());

        System.out.println("所有数字的总和   : " + stats.getSum());

        System.out.println("所有数字的平均值 : " + stats.getAverage());

        System.out.println("---------------");

        String nameList = persons.stream().map(Person::getName).collect(Collectors.joining(";"));

        System.out.println(nameList);

        System.out.println("---------------");

        Set<Integer> ageSet = persons.stream().map(Person::getAge).collect(Collectors.toSet());

        System.out.println(ageSet);

        System.out.println("---------------");

        TreeSet<Integer> ageTreeSet = persons.stream().map(Person::getAge)

            .collect(Collectors.toCollection(TreeSet::new));

        System.out.println(ageTreeSet);

        System.out.println("---------------");

        //聚合操作

        Map<Integer, List<String>> res = persons.stream().collect(

            Collectors.groupingBy(Person::getAge,

                Collectors.mapping(Person::getName, Collectors.toList())));

        System.out.println(res);

        System.out.println("---------------");

        Map<String, Double> res1 = persons.stream().collect(

            Collectors.groupingBy(Person::getName, Collectors.averagingDouble(Person::getAge)));

        System.out.println(res1);

        System.out.println("---------------");

        int sum = aa.stream().map((x) -> x).reduce(0, (x, y) -> x + y);

        int sum1 = aa.stream().mapToInt((x) -> x).sum();

        System.out.println(sum);

        System.out.println(sum1);

        System.out.println("---------------");

        String[] strs = { "java8", "is", "easy", "to", "use" };

        List<String[]> distinctStrs = Arrays.stream(strs).map(str -> str.split("")) // 映射成为Stream<String[]>  

            .distinct().collect(Collectors.toList());

        distinctStrs.forEach(strings -> Arrays.stream(strings).forEach(s -> System.out.println(s)));

        System.out.println("==================================map方式");

        List<String> distinctStrsByFlatMap = Arrays.stream(strs).map(str -> str.split("")) // 映射成为Stream<String[]>  

            .flatMap(Arrays::stream) // 扁平化为Stream<String>  

            .distinct().collect(Collectors.toList());

        distinctStrsByFlatMap.forEach(s -> System.out.println(s));

        System.out.println("==================================flatMap的方式");

        List<List<String>> testFlatMap = new ArrayList<List<String>>();

        List<String> aaa = new ArrayList<String>();

        aaa.add("a");

        aaa.add("a");

        aaa.add("c");

        aaa.add("b");

        List<String> aaa1 = new ArrayList<String>();

        aaa1.add("ab");

        aaa1.add("ab");

        aaa1.add("cc");

        aaa1.add("bd");

        testFlatMap.add(aaa);

        testFlatMap.add(aaa1);

        System.out.println(testFlatMap.stream().flatMap(List::stream)

            .collect(Collectors.joining(";")));

        System.out.println("---------------");

        Set<String>  flatMap=testFlatMap.stream().flatMap(List::stream).collect(Collectors.toSet());

        System.out.println(flatMap);

        System.out.println("---------------");

    }

    private static Map<String, Integer> convertPersonTo(Person person) {

        Map<String, Integer> personMap = Maps.newHashMap();

        personMap.putIfAbsent(person.getName(), person.getAge());

        return personMap;

    }

    private static PersonInfo convertToPersonInfo(Person person) {

        PersonInfo personInfo = new PersonInfo();

        personInfo.setAge(person.getAge());

        personInfo.setName(person.getName());

        return personInfo;

    }

    private static Comparator<Person> sortByRule() {

        Comparator<Person> age = ((o1, o2) -> {

            return Integer.compare(o2.getAge(), o1.getAge());

        });

        Comparator<Person> name = ((o1, o2) -> {

            return o1.getName().compareTo(o2.getName());

        });

        return age.thenComparing(name.reversed());

    }

    private static class PersonInfo {

        private String name;

        private int    age;

        public String getName() {

            return name;

        }

        public void setName(String name) {

            this.name = name;

        }

        public int getAge() {

            return age;

        }

        public void setAge(int age) {

            this.age = age;

        }

    }

}