java8中的stream,function包的常用方法总结
2017-06-06 18:20
363 查看
由于工作需要如下是java8中的stream,function两个包中的常用方法.
一,首先定义两个List:
List<Person> javaProgrammers=new ArrayList<Person>(){
{
add(new Person("Elsdon", "Jaycob", "Java programmer", "male", 43, 2000));
add(new Person("Tamsen", "Brittany", "Java programmer", "female", 23, 1500));
add(new Person("Floyd", "Donny", "Java programmer", "male", 33, 1800));
add(new Person("Sindy", "Jonie", "Java programmer", "female", 32, 1600));
add(new Person("Vere", "Hervey", "Java programm
4000
er", "male", 22, 1200));
add(new Person("Maude", "Jaimie", "Java programmer", "female", 27, 1900));
add(new Person("Shawn", "Randall", "Java programmer", "male", 30, 2300));
add(new Person("Jayden", "Corrina", "Java programmer", "female", 35, 1700));
add(new Person("Palmer", "Dene", "Java programmer", "male", 33, 2000));
add(new Person("Addison", "Pam", "Java programmer", "female", 34, 1300));
}
};
List<Person> phpProgrammers = new ArrayList<Person>() {
{
add(new Person("Jarrod", "Pace", "PHP programmer", "male", 3400, 1550));
add(new Person("Clarette", "Cicely", "PHP programmer", "female", 23, 1200));
add(new Person("Victor", "Channing", "PHP programmer", "male", 3200, 1600));
add(new Person("Tori", "Sheryl", "PHP programmer", "female", 21000, 1000));
add(new Person("Osborne", "Shad", "PHP programmer", "male", 32, 1100));
add(new Person("Rosalind", "Layla", "PHP programmer", "female", 250000, 1300));
add(new Person("Fraser", "Hewie", "PHP programmer", "male", 3600, 1100));
add(new Person("Quinn", "Tamara", "PHP programmer", "female", 21, 1000));
add(new Person("Alvin", "Lance", "PHP programmer", "male", 3800, 1600));
add(new Person("Evonne", "Shari", "PHP programmer", "female", 40, 1800));
}
};
二,然后是一些常用的方法:
//1,使用forEach方法来迭代输出上述列表
javaProgrammers.forEach(person -> System.out.printf("%s %s",person.getFirstName(),person.getLastName()));
//使用forEach方法,增加程序员的工资5%
Consumer<Person> givenRaise=person -> person.setSalary(person.getSalary()/100*5+person.getSalary());
javaProgrammers.forEach(givenRaise);
//2,使用过滤器filter() ,让我们显示月薪超过1400美元的PHP程序员:
phpProgrammers.stream().filter(person -> person.getSalary()>1800).forEach(person -> System.out.printf("%s%s",person.getFirstName(),person.getLastName()));
//3,自定义过滤器
Predicate<Person> ageFilter=person -> person.getAge()>24;
Predicate<Person> salaryFilter=person -> person.getSalary()>1400;
Predicate<Person> genderFilter=person -> ("male".equalsIgnoreCase(person.getGender()));
//下面是年龄大于 24岁且月薪在$1,400以上的女PHP程序员,使用limit方法,可以限制结果集的个数:
phpProgrammers.stream().filter(ageFilter).filter(salaryFilter).filter(genderFilter).limit(2).forEach(person -> System.out.printf("%s,",person.getFirstName()));
//3,排序,由小到大,字符串的排序
List<Person> sortedJava=javaProgrammers.stream().sorted((p1,p2)->p1.getFirstName().compareTo(p2.getFirstName())).collect(Collectors.toList());
sortedJava.stream().forEach(person -> System.out.println(person.getFirstName()));
//排序,由小到大,整型的排序
javaProgrammers.stream().sorted((p1,p2)->p1.getSalary()-p2.getSalary()).forEach(person -> System.out.println(person.getSalary()));
//4,最低工资,namely,min
Person person1=javaProgrammers.stream().min((p1,p2)->p1.getSalary()-p2.getSalary()).get();
//最高工资,namely,max
Person person2=javaProgrammers.stream().max((p1,p2)->p1.getSalary()-p2.getSalary()).get();
//5,将 PHP programmers 的 first name 拼接成字符串,以 ","作为分隔符
String phpDeveloper=phpProgrammers.stream().map(Person::getFirstName).collect(joining(","));
//6,将 Java programmers 的 first name 存放到 Set
Set<String> phpSet=phpProgrammers.stream().map(Person::getFirstName).collect(Collectors.toSet());
//7,将 Java programmers 的 first name 存放到 TreeSet
TreeSet<String> phpTreeSet=phpProgrammers.stream().map(Person::getFirstName).collect(toCollection(TreeSet::new));
//8,并行操作,计算付给 Java programmers 的所有money,Streams 还可以是并行的(parallel)
int totalMoney=javaProgrammers.parallelStream().mapToInt(person->person.getSalary()).sum();
//9,计算 count, min, max, sum, and average for numbers
List<Integer> numbers=Arrays.asList(1,2,3,4,5,6,7,8,9,10);
IntSummaryStatistics statistics=numbers.stream().mapToInt(x->x).summaryStatistics();
double avg=statistics.getAverage();
long count=statistics.getCount();
int max=statistics.getMax();
int min=statistics.getMin();
long sum=statistics.getSum();
一,首先定义两个List:
List<Person> javaProgrammers=new ArrayList<Person>(){
{
add(new Person("Elsdon", "Jaycob", "Java programmer", "male", 43, 2000));
add(new Person("Tamsen", "Brittany", "Java programmer", "female", 23, 1500));
add(new Person("Floyd", "Donny", "Java programmer", "male", 33, 1800));
add(new Person("Sindy", "Jonie", "Java programmer", "female", 32, 1600));
add(new Person("Vere", "Hervey", "Java programm
4000
er", "male", 22, 1200));
add(new Person("Maude", "Jaimie", "Java programmer", "female", 27, 1900));
add(new Person("Shawn", "Randall", "Java programmer", "male", 30, 2300));
add(new Person("Jayden", "Corrina", "Java programmer", "female", 35, 1700));
add(new Person("Palmer", "Dene", "Java programmer", "male", 33, 2000));
add(new Person("Addison", "Pam", "Java programmer", "female", 34, 1300));
}
};
List<Person> phpProgrammers = new ArrayList<Person>() {
{
add(new Person("Jarrod", "Pace", "PHP programmer", "male", 3400, 1550));
add(new Person("Clarette", "Cicely", "PHP programmer", "female", 23, 1200));
add(new Person("Victor", "Channing", "PHP programmer", "male", 3200, 1600));
add(new Person("Tori", "Sheryl", "PHP programmer", "female", 21000, 1000));
add(new Person("Osborne", "Shad", "PHP programmer", "male", 32, 1100));
add(new Person("Rosalind", "Layla", "PHP programmer", "female", 250000, 1300));
add(new Person("Fraser", "Hewie", "PHP programmer", "male", 3600, 1100));
add(new Person("Quinn", "Tamara", "PHP programmer", "female", 21, 1000));
add(new Person("Alvin", "Lance", "PHP programmer", "male", 3800, 1600));
add(new Person("Evonne", "Shari", "PHP programmer", "female", 40, 1800));
}
};
二,然后是一些常用的方法:
//1,使用forEach方法来迭代输出上述列表
javaProgrammers.forEach(person -> System.out.printf("%s %s",person.getFirstName(),person.getLastName()));
//使用forEach方法,增加程序员的工资5%
Consumer<Person> givenRaise=person -> person.setSalary(person.getSalary()/100*5+person.getSalary());
javaProgrammers.forEach(givenRaise);
//2,使用过滤器filter() ,让我们显示月薪超过1400美元的PHP程序员:
phpProgrammers.stream().filter(person -> person.getSalary()>1800).forEach(person -> System.out.printf("%s%s",person.getFirstName(),person.getLastName()));
//3,自定义过滤器
Predicate<Person> ageFilter=person -> person.getAge()>24;
Predicate<Person> salaryFilter=person -> person.getSalary()>1400;
Predicate<Person> genderFilter=person -> ("male".equalsIgnoreCase(person.getGender()));
//下面是年龄大于 24岁且月薪在$1,400以上的女PHP程序员,使用limit方法,可以限制结果集的个数:
phpProgrammers.stream().filter(ageFilter).filter(salaryFilter).filter(genderFilter).limit(2).forEach(person -> System.out.printf("%s,",person.getFirstName()));
//3,排序,由小到大,字符串的排序
List<Person> sortedJava=javaProgrammers.stream().sorted((p1,p2)->p1.getFirstName().compareTo(p2.getFirstName())).collect(Collectors.toList());
sortedJava.stream().forEach(person -> System.out.println(person.getFirstName()));
//排序,由小到大,整型的排序
javaProgrammers.stream().sorted((p1,p2)->p1.getSalary()-p2.getSalary()).forEach(person -> System.out.println(person.getSalary()));
//4,最低工资,namely,min
Person person1=javaProgrammers.stream().min((p1,p2)->p1.getSalary()-p2.getSalary()).get();
//最高工资,namely,max
Person person2=javaProgrammers.stream().max((p1,p2)->p1.getSalary()-p2.getSalary()).get();
//5,将 PHP programmers 的 first name 拼接成字符串,以 ","作为分隔符
String phpDeveloper=phpProgrammers.stream().map(Person::getFirstName).collect(joining(","));
//6,将 Java programmers 的 first name 存放到 Set
Set<String> phpSet=phpProgrammers.stream().map(Person::getFirstName).collect(Collectors.toSet());
//7,将 Java programmers 的 first name 存放到 TreeSet
TreeSet<String> phpTreeSet=phpProgrammers.stream().map(Person::getFirstName).collect(toCollection(TreeSet::new));
//8,并行操作,计算付给 Java programmers 的所有money,Streams 还可以是并行的(parallel)
int totalMoney=javaProgrammers.parallelStream().mapToInt(person->person.getSalary()).sum();
//9,计算 count, min, max, sum, and average for numbers
List<Integer> numbers=Arrays.asList(1,2,3,4,5,6,7,8,9,10);
IntSummaryStatistics statistics=numbers.stream().mapToInt(x->x).summaryStatistics();
double avg=statistics.getAverage();
long count=statistics.getCount();
int max=statistics.getMax();
int min=statistics.getMin();
long sum=statistics.getSum();
//map ,flatmap的区别:map能够直接操作list中的每个对象,而使用flatmap使我们能够操作更深一层的数据,如下:List<List<?>> List<Integer> integerList=Arrays.asList(1,2,3,4,5); integerList.stream().map(integer -> integer+1).forEach(System.out::println);//2,3,4,5,6 List<List<Integer>> outer=new ArrayList<>(); List<Integer> inner1=new ArrayList<>(); List<Integer> inner2=new ArrayList<>(); List<Integer> inner3=new ArrayList<>(); List<Integer> inner4=new ArrayList<>(); List<Integer> inner5=new ArrayList<>(); List<Integer> inner6=new ArrayList<>(); inner1.add(1); inner2.add(2); inner3.add(3); inner4.add(4); inner5.add(5); inner6.add(6); outer.add(inner1); outer.add(inner2); outer.add(inner3); outer.add(inner4); outer.add(inner5); outer.add(inner6); List<Integer> result=outer.stream().flatMap(inner->inner.stream().map(integer -> integer+1)).collect(Collectors.toList()); System.out.println(result);//[2, 3, 4, 5, 6, 7]
相关文章推荐
- JAVA常用JDBC连接数据库方法总结
- POI操作Excel常用方法总结 分类: B1_JAVA 2013-08-23 10:01 349人阅读 评论(0) 收藏
- java 防止 XSS 攻击的常用方法总结.
- Java常用的类方法使用总结
- 黑马程序员——Java学习总结:IO常用方法练习
- 【转】java_中常用的方法总结
- JAVA String类的常用方法总结
- java中String类常用方法总结
- 12-6java面向对象之String类常用方法的总结
- Java中常用字符串方法总结
- Java中常用字符串方法总结
- java中遍历Map常用方法 及优缺点总结
- java常用方法总结
- Java中Calendar常用方法总结
- java 防止 XSS 攻击的常用方法总结
- java 防止 XSS 攻击的常用方法总结.
- Java常用方法总结
- Java中常用字符串方法总结
- 黑马程序员——Java学习总结:IO常用方法练习
- java 防止 XSS 攻击的常用方法总结.