java的Stream流

120 阅读2分钟

实体类

public class User {
	
	Integer id;
	Integer age;
	String name;

	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	@Override
	public String toString() {
		return "User [id=" + id + ", age=" + age + ", name=" + name + "]";
	}
	
	public User() {
		super();
		// TODO Auto-generated constructor stub
	}
	public User(Integer id, Integer age, String name) {
		super();
		this.id = id;
		this.age = age;
		this.name = name;
		
	}

}

排序

public static void main(String[] args) {
		List<User> list = new ArrayList<User>();
		User user = new User(1,15,"小明1");
		User user1 = new User(1,16,"小明2");
		User user2 = new User(2,17,"小明3");
		User user3 = new User(2,18,"小明4");
		User user4 = new User(3,19,"小明5");
		list.add(user);
		list.add(user1);
		list.add(user2);
		list.add(user3);
		list.add(user4);
		List<User> sorted = list.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList());
		for (User us : sorted) {
			System.out.println(us);
		}
		
	}

结果

User [id=1, age=15, name=小明1]
User [id=1, age=16, name=小明2]
User [id=2, age=17, name=小明3]
User [id=2, age=18, name=小明4]
User [id=3, age=19, name=小明5]


聚合

public static void main(String[] args) {
		List<User> list = new ArrayList<User>();
		User user = new User(1,15,"小明1");
		User user1 = new User(1,16,"小明2");
		User user2 = new User(2,17,"小明3");
		User user3 = new User(2,18,"小明4");
		User user4 = new User(3,19,"小明5");
		list.add(user);
		list.add(user1);
		list.add(user2);
		list.add(user3);
		list.add(user4);
//		List<User> sorted = list.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList());
//		for (User us : sorted) {
//			System.out.println(us);
//		}
		Map<Integer, List<User>> collect = list.stream().collect(Collectors.groupingBy(User::getId));
		Set<Integer> keySet = collect.keySet();
		Iterator<Integer> iterator = keySet.iterator();
		while (iterator.hasNext()) {
			Integer next = iterator.next();
			List<User> list2 = collect.get(next);
			System.out.println("---------" + next + "---------");
			for (User uu : list2) {
				System.out.println(uu);
			}
		}
	}

结果

---------1---------
User [id=1, age=15, name=小明1]
User [id=1, age=16, name=小明2]
---------2---------
User [id=2, age=17, name=小明3]
User [id=2, age=18, name=小明4]
---------3---------
User [id=3, age=19, name=小明5]

最大值最小值

public static void main(String[] args) {
		List<User> list = new ArrayList<User>();
		User user = new User(1,15,"小明1");
		User user1 = new User(1,16,"小明2");
		User user2 = new User(2,17,"小明3");
		User user3 = new User(2,18,"小明4");
		User user4 = new User(3,19,"小明5");
		list.add(user);
		list.add(user1);
		list.add(user2);
		list.add(user3);
		list.add(user4);
                Optional<User> max = list.stream()
	                .collect(
	                		Collectors.maxBy(Comparator.comparing(User::getAge))
	                );
	        Optional<User> min = list.stream()
	                .collect(
	                		Collectors.minBy(Comparator.comparing(User::getAge))
	                );
	        System.out.println("max--> " + max+"  min--> "+ min);
                
                
}                

结果

max--> Optional[User [id=3, age=19, name=小明5]]  min--> Optional[User [id=1, age=15, name=小明1]]