#千锋逆战班 Java JDK8

生活的有趣在于,昨天的最大痛楚,极可能成就明天的最大力量。

Stream

public class TestStream {

	public static void main(String[] args) {
		List<String> list=new ArrayList<String>();
		for(int i=0;i<1000000;i++) {
			UUID u=UUID.randomUUID();
			list.add(u.toString());
		}
//		System.out.println("串行---518-526-517");
//		//串行-->一条执行路径 单线成
//		long start=System.currentTimeMillis();
//		long count=list.stream().sorted().count();
//		System.out.println("排序了:"+count);
//		long end=System.currentTimeMillis();
//		System.out.println("用时:"+(end-start));
	
		System.out.println("并行---296-316-350");
		long start=System.currentTimeMillis();
		long count=list.parallelStream().sorted().count();//并行-->多条执行路径,多线程
		System.out.println("排序了:"+count);
		long end=System.currentTimeMillis();
		System.out.println("用时:"+(end-start));
	}
}

1

public class TestCreateStream {

	public static void main(String[] args) {
		//Stream--->集合,数组
		List<String> list=new ArrayList<String>();
		list.add("zhangsan");
		list.add("lisi");
		list.add("wangwu");
		list.add("zhaoliu");
		list.add("hanhan");
//		//1,创建Stream
//		Stream<String> stream=list.stream();
//		//2中间操作
//		Stream<String> center=stream.filter((s)->s.length()>=5);
//		//3终止操作 最终操作
//		System.out.println("名字长度大于5的是:");
//		center.forEach(System.out::println);
//		
		//简化
		list.stream().filter((s)->s.length()>=5).forEach(System.out::println);
	}
}

2

public class TestStreamMethod {

	public static void main(String[] args) {
		List<String> list=new ArrayList<String>();
		list.add("zhangsan");
		list.add("lisi");
		list.add("wangwu");
		list.add("zhaoliu");
		list.add("hanhan");
		list.add("xiaozhi");
		System.out.println("-------filter-------");
		//filter---->过滤 指定原则
		list.stream().filter((s)->s.startsWith("x")).filter((s)->s.contains("z")).forEach(System.out::println);
		System.out.println("------limit------");
		//limit--->截断 ,返回不超过指定数量
		list.stream().limit(7).forEach(System.out::println);
		System.out.println("-------distinct-------");
	
		List<Emp> elist=new ArrayList<Emp>();
		elist.add(new Emp("高强",18,100));
		elist.add(new Emp("高蓝轩",28,100));
		elist.add(new Emp("刘晗",21,30));
		elist.add(new Emp("小智",20,100));
		elist.add(new Emp("刘晗",38,30));  //地址不同,hashCode不相等。equals是相等的
		//不会影响数据
		elist.stream().distinct().forEach(System.out::println);
		elist.forEach(System.out::println);
		
		//Map指的是<T,R> 不是集合!
		System.out.println("-------map-------");
		//emp-->T  getName()-->R
		elist.stream().map((emp)->emp.getName()).forEach(System.out::println);
		elist.stream().map((emp)->emp.getScore()).forEach(System.out::println);
		
		List<String> strList=Arrays.asList("aaa","bbb","ccc","ddd","eee");
		//strList.stream().map((s)->s.toUpperCase()).forEach(System.out::println);
		strList.stream().map(String::toUpperCase).forEach(System.out::println);
		System.out.println("-------sorted------");
		//sorted排序,流中的元素必须实现Comparable接口
//		list.stream().sorted().forEach(System.out::println);
	
//		elist.stream().sorted().forEach(System.out::println);
		System.out.println("---------sorted(Comparator)--------");
		elist.stream().sorted((x,y)->Double.compare(x.getScore(), y.getScore())).forEach(System.out::println);
	}
}
public class Emp {
	private String name;
	private int age;
	private double score;
	@Override
	public int hashCode() {
		return (int)(this.name.hashCode()+this.age+this.score);
	}
	@Override
	public boolean equals(Object obj) {
		//比较两个引用是否指向同一个对象
		if(this==obj) {
			return true;
		}
		//2.obj是否为空
		if(obj==null) {
			return false;
		}
		//3.判断两个引用的实际类型
		if(this.getClass()!=obj.getClass()) {
			return false;
		}
		//4.强转
		Emp emp=(Emp)obj;
		//5.比较
		if(this.name.equals(emp.getName())&&this.age==emp.getAge()&&this.score==emp.getScore()){
			return true;
		}
		
		return super.equals(obj);
	}

	public Emp() {
		super();
	}
	public Emp(String name, int age, double score) {
		super();
		this.name = name;
		this.age = age;
		this.score = score;
	}
	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 getScore() {
		return score;
	}
	public void setScore(double score) {
		this.score = score;
	}
	@Override
	public String toString() {
		return "Emp [name=" + name + ", age=" + age + ", score=" + score + "]";
	}
	
	public int compareTo(Emp o) {
		return this.age-o.getAge();
	}
}

3

public class TestEndMethod {

	public static void main(String[] args) {
		//1.forEach--->遍历
		List<String> list=new ArrayList<String>();
		list.add("Blist");
		list.add("BSet");
		list.add("C罗");
		list.add("M西");
		list.add("Eelement");
		//list.forEach(System.out::println);
		//2.count--->流中元素的个数
		System.out.println("----------count-------");
		int count=(int)list.stream().filter((s)->s.length()>=3).count();
		System.out.println("流中有:"+count);
		System.out.println("-------anymatch-------");
		boolean b1=list.stream().filter((s)->s.length()>=3).anyMatch((s)->s.startsWith("A"));
		System.out.println("有没有A开头的:"+b1);
	
		System.out.println("---------allmatch-------");
		boolean b2=list.stream().filter((s)->s.length()>=3).allMatch((s)->s.contains("t"));
		System.out.println(b2);
	
		System.out.println("----------findfirst--------");
		String str=list.stream().filter((s)->s.length()>=3).findFirst().get();
		System.out.println(str);
	
		System.out.println("------findany-------");
		Optional<String> o=list.parallelStream().findAny();
		System.out.println(o.get());
	
		Optional<String> o2=list.parallelStream().findAny();
		System.out.println(o2.get());
	
		System.out.println("------max-----");
		List<Emp> elist=new ArrayList<Emp>();
		elist.add(new Emp("高强",18,100));
		elist.add(new Emp("高蓝轩",28,100));
		elist.add(new Emp("晗晗",21,30));
		elist.add(new Emp("小智",20,100));
		elist.add(new Emp("晗晗",38,30)); 
		Optional<Emp> max=elist.stream().max((e1,e2)->e1.getAge()-e2.getAge());
		System.out.println(max.get());
		
		System.out.println("--------min------");
		Optional<Emp> min=elist.stream().min((e1,e2)->e1.getAge()-e2.getAge());
		System.out.println(min.get());
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值