package com.my.test.one;
public class Student {
private String name;
private int score;
public Student(){
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public Student(String name, int score) {
super();
this.name = name;
this.score = score;
}
//setter和getter省略
@Override
public String toString() {
return "[姓名=" + name + ", 分数=" + score + "]";
}
}
测试
package com.my.test.one; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.OptionalDouble; import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.Stream; public class Test3 { public static void main(String[] args) { List<Student> stuList = new ArrayList<>(10); stuList.add(new Student("刘一", 85)); stuList.add(new Student("陈二", 90)); stuList.add(new Student("张三", 98)); stuList.add(new Student("李四", 88)); stuList.add(new Student("王五", 83)); stuList.add(new Student("赵六", 95)); stuList.add(new Student("孙七", 87)); stuList.add(new Student("周八", 84)); stuList.add(new Student("吴九", 100)); stuList.add(new Student("郑十一", 95)); //初始化List数据同上 List<Student> list = stuList; //使用map方法获取list数据中的name List<String> names = list.stream().map(Student::getName).collect(Collectors.toList()); System.out.println(names); //使用map方法获取list数据中的name的长度 List<Integer> length = list.stream().map(Student::getName).map(String::length).collect(Collectors.toList()); System.out.println(length); //将每人的分数-10 List<Integer> score = list.stream().map(Student::getScore).map(i -> i - 10).collect(Collectors.toList()); System.out.println(score); //计算最高分和最低分 Optional<Integer> max = list.stream().map(Student::getScore).reduce(Integer::max); Optional<Integer> min = list.stream().map(Student::getScore).reduce(Integer::min); System.out.println(max.get()); System.out.println(min.get()); //计算学生总分 Integer totalScore1 = list.stream().map(Student::getScore).reduce(0,(a,b) -> a + b); System.out.println(totalScore1); //.reduce((a,b) -> a + b)相当于 .sum 不过没有这个方法 可以通过原始流解决 //计算学生总分,返回Optional类型的数据,改类型是java8中新增的,主要用来避免空指针异常 Optional<Integer> totalScore2 = list.stream().map(Student::getScore).reduce((a,b) -> a + b); System.out.println(totalScore2.get()); //将stream转换为IntStream 三个原始类型流(IntStream、DoubleStream、LongStream) int totalScore = list.stream().mapToInt(Student::getScore).sum(); System.out.println(totalScore); //计算平均分 OptionalDouble avgScore = list.stream().mapToInt(Student::getScore).average(); System.out.println(avgScore.getAsDouble()); //生成1~100之间的数字 IntStream num = IntStream.rangeClosed(1, 100); //计算1~100之间的数字中偶数的个数 long count = IntStream.rangeClosed(1, 100).filter(n -> n%2 == 0).count(); System.out.println(count); //使用数组创建流 int[] num1 = {2,5,9,8,6}; IntStream intStream = Arrays.stream(num1); int sum = intStream.sum();//求和 System.out.println(sum); //由函数生成流,创建无限流 Stream.iterate(0, n -> n+2).limit(10).forEach(System.out::println); // Optional类 // 两个作用:(1)解决空指针异常 (2)支持函数式编程,所以使用它可以简化代码 Map<Integer,String> map = new HashMap<>(); map.put(20180001,"章子"); map.put(20180002,"小米"); map.put(20180003,"大黄"); map.put(20180004,"靓妹"); String name = Optional.ofNullable(map.get(20180005)).orElse("无"); System.out.println(name); //无 } }