jdk8 list操作 特性

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);  //无
	}

	
	
	
	

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值