java8 Stream 學習

package com.test;

public class Person {
	private String id;
	private String name;
	private Integer age;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public Person() {
		super();
	}

	public Person(String id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	
	public Person(String id, String name, Integer age) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
	}

	@Override
	public String toString() {
		return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
	}

}
package com.test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class StreamTest {

	public static void main(String[] args) {
		//聲明一個List集合
		List<Person> list1 = new ArrayList<>();
		list1.add(new Person("1001", "小A"));
		list1.add(new Person("1002", "小B"));
		list1.add(new Person("1001", "小A"));
		list1.add(new Person("1001", "小C"));

		//單個字段集合,去重distinct()
		List<String> ids = list1.stream().map(Person::getId).distinct().collect(Collectors.toList());
		System.out.println(ids);

		//按照某個字段分組
		Map<String, List<Person>> group = list1.stream().collect(Collectors.groupingBy(Person::getId));
		System.out.println(group);

		//一個分組字段,對應多組數據
		Map<String, List<String>> map = list1.stream().collect(Collectors.toMap(Person::getId, p -> {
			List<String> names = new ArrayList<String>();
			names.add(p.getName());
			return names;
		}, (List<String> oldValue, List<String> newValue) -> {
			oldValue.removeAll(newValue); //去重
			oldValue.addAll(newValue);
			return oldValue;
		}));

		System.out.println(map);

		//聲明一個List集合
		List<Person> persons = new ArrayList<>();
		persons.add(new Person("1001", "小A", 10));
		persons.add(new Person("1002", "小B", 50));
		persons.add(new Person("1003", "小C", 10));
		persons.add(new Person("1004", "小D", 20));

		//單個字段求和
		int sum = persons.stream().mapToInt(Person::getAge).sum();
		System.out.println("單個字段求和:" + sum);

		//單個字段最大值
		int max = persons.stream().mapToInt(Person::getAge).max().getAsInt();
		System.out.println("單個字段最大值:" + max);

		//單個字段最小值
		int min = persons.stream().mapToInt(Person::getAge).min().getAsInt();
		System.out.println("單個字段最小值:" + min);

		//單個字段平均值
		double ave = persons.stream().mapToInt(Person::getAge).average().getAsDouble();
		System.out.println("單個字段平均值:" + ave);

		//多個聚合函數
		Map<Object, Object> map1 = persons.stream().collect(
				Collectors.groupingBy(Person::getClass, Collectors.collectingAndThen(Collectors.toList(), list -> {
					double sum1 = persons.stream().mapToInt(Person::getAge).sum();
					double average = persons.stream().collect(Collectors.averagingDouble(Person::getAge));
					double average2 = persons.stream().mapToInt(Person::getAge).average().getAsDouble();
					long count = persons.stream().count();

					return Arrays.asList(sum1, average, average2, count);
				})));
		System.out.println(map1);
	}

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章