java1.8特性之三——stream流

package lambdaDemo;

import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.Clock;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import java.util.Random;
import java.util.stream.Collector;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class StreamDemo {
	public static void main(String[] args) {
		String[] x = {"赵","钱","孙","李","周","吴","郑","王","冯"};
		String[] y = {"伯","仲","叔","季","甲","乙","丙","丁","三"};
		List<User> userList = new ArrayList<User>();
		for(int i = 0;i < 15;i++) {
			 String name = x[new Random().nextInt(x.length)] + y[new Random().nextInt(y.length)];
			 int age = new Random().nextInt(30);
			 User user = new User();
			 user.setName(name);
			 user.setAge(age);
			 //user.setCreateTime(new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
			 userList.add(user);
		}
		userList.stream().forEach(user -> System.out.println(user));
		System.out.println("================排序=============");
		userList.stream().sorted((user1,user2) -> new Integer(user1.getAge()).compareTo(new Integer(user1.getAge())));
		userList.stream().forEach(user -> System.out.println(user));
		System.out.println("================过滤:找出年龄大于20的=============");
		userList.stream().filter(user -> user.getAge() >20).forEach(user -> System.out.println(user));
		List<User> filterList = userList.stream().filter(user -> user.getAge() >20).collect(Collectors.toList());
		System.out.println("================找出集合中元素对象某一属性的集合=============");
		List<String> attribute = userList.stream().map(user -> user.getName()).collect(Collectors.toList());
		attribute.stream().forEach(name -> System.out.println(name));
		System.out.println("================找出集合中元素对象姓名有三的人年龄改成90,并把所有元素对象的所有创建时间加上=============");
		Timestamp now = new Timestamp(System.currentTimeMillis());
		List<User> newUserList = userList.stream().map(user -> {
			if(user.getName().contains("三")) {
				user.setAge(90);
			}
			user.setCreateTime(now);
			return user;
		}).collect(Collectors.toList());
		newUserList.stream().forEach(user -> System.out.println(user));
		System.out.println("================找出集合中元素对象年龄为20的人数=============");
		System.out.println(userList.stream().filter(user -> user.getAge() == 20).count());
		System.out.println("================找出集合中元素对象年龄大于18岁的分一组,小于18岁分一组=============");
		List<User> adultlist = userList.stream().filter(user -> user.getAge() >= 18).collect(Collectors.toList());
		adultlist.stream().forEach(user -> System.out.println(user));
		System.out.println("==============");
		List<User> chilelist = userList.stream().filter(user -> user.getAge() < 18).collect(Collectors.toList());
		chilelist.stream().forEach(user -> System.out.println(user));
		System.out.println("================找出俩个集合的交集=============");
		List<User> copylist = chilelist.subList(0, 2);
		for(int i = 0;i < 4;i++) {
			 String name = x[new Random().nextInt(x.length)] + y[new Random().nextInt(y.length)];
			 int age = new Random().nextInt(30);
			 User user = new User();
			 user.setName(name);
			 user.setAge(age);
			 user.setCreateTime(now);
			 copylist.add(user);
		}
		copylist.stream().map(user -> {
			if(userList.contains(user)) {
				return user;
			}else {
				return null;
			}
		}).filter(user -> user != null).forEach(user -> System.out.println(user));
		System.out.println("================找出copylist集合中userList没有的=============");
		copylist.stream().map(user -> {
			if(userList.contains(user)) {
				return null;
			}else {
				return user;
			}
		}).filter(user -> user != null).forEach(user -> System.out.println(user));
	}
}

总结:目前只想到了这些可能的应用场景。如果有新的会继续更新

猜你喜欢

转载自blog.csdn.net/shidebin/article/details/82906834