java8Lambda-stream常用总结

stream

Stream:流

1. 将dataList中每个Student对象的分数组装成新list

scoreList=dataList.stream().map(Student::getScore).collect(Collectors.toList());

2. 遍历dataList
dataList.forEach(System.out::println)

3. collect:收集器
能够将流转换成其他形式,比如list、set、map

4. filter:过滤器
设置条件过滤掉不需要内容

5. distinct:去重

6. limit:获取流中前n个数据

7. skip:去除流中前n个数据

8. map:映射(转换)每个数据到对应结果

9. flatmap:流的扁平化处理
流中数据元素平铺合并

10. mapToXxx:转换类型
mapToLong...

11. sorted:对流进行排序

12. anyMatch:至少匹配一个元素,返回bollean

13. allMatch:检查是否全匹配,返回Boolean

14. noneMatch:检查是否没有匹配所有元素,返回Boolean

15. findAny:返回流中任意元素

16. findFirst:返回第一个元素

17. reduce:将流中元素反复结合起来,得到一个值

18. count:获取集合元素数量

19. peek:做一些外部处理等

20. Stream.of:初始化集合




import java.text.Collator;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Test8 {
	public static void main(String[] args) {
		new Test8().doWork();

	}

	private List<String> strings;
	private List<Integer> ints;
	private List<String> names;
	private List<Student> students;

	private void doWork() {
		// list转set
		Set<String> c1 = strings.stream().collect(Collectors.toSet());
		// list转map:第一个参数是key,第二个参数是value,第三个参数遇到重复的选newV
		Map<String, String> c2 = strings.stream()
				.collect(Collectors.toMap(v -> "prod_" + v, v -> v, (oldV, newV) -> newV));

		// 将 student 集合按照 id(唯一) 封装成 map 集合
		Map<Integer, Student> sMap = students.stream()
				.collect(Collectors.toMap(stu -> stu.getId(), stu -> stu, (oldV, newV) -> newV));

		// 将 students 集合按照 年龄 封装成 map 集合
		Map<Integer, List<Student>> c3 = students.stream().collect(Collectors.groupingBy(stu -> stu.getAge()));

		// 将 strings 集合中带 f 的字符串筛选出来放如另外一个集合
		List<String> c4 = strings.stream().filter(str -> str.contains("f")).collect(Collectors.toList());

		// 将 students 集合中叫年龄为 18 的同学找出来
		List<Student> c5 = students.stream().filter(stu -> stu.getAge() == 18).collect(Collectors.toList());

		// distinct 去重
		List<String> c6 = strings.stream().distinct().collect(Collectors.toList());

		// limit 获取前几个
		List<String> c7 = strings.stream().limit(3).collect(Collectors.toList());

		// skip 跳过前几个
		List<String> c8 = names.stream().skip(3).collect(Collectors.toList());

		// 将集合 names 中的每个元素都拼接一个 A- str -A
		List<String> c9 = names.stream().map(name -> "A-" + name.concat("-A")).collect(Collectors.toList());

		// 获取 students 集合中每个同学的 名字
		List<String> c10 = students.stream().map(stu -> stu.getName()).collect(Collectors.toList());
		List<String> c11 = students.stream().map(Student::getName).collect(Collectors.toList());

		// map:对元素进行转换(多个元素的流)
		List<Stream<Character>> c12 = strings.stream().map(Test8::getCharacterByString).collect(Collectors.toList());

		// flatMap:流中元素平铺合并(所有元素平铺的流)
		List<Character> c13 = strings.stream().flatMap(Test8::getCharacterByString).collect(Collectors.toList());

		// sorted:流排序
		List<String> c14 = names.stream().sorted().collect(Collectors.toList());

		// sorted:正向中文排序
		List<String> c15 = names.stream().sorted(Collator.getInstance(Locale.CHINA)).collect(Collectors.toList());
		// sorted:反向中文排序
		List<String> c16 = names.stream().sorted(Collections.reverseOrder(Collator.getInstance(Locale.CHINA)))
				.collect(Collectors.toList());

		// 将 students 集合按照年龄进行排序,年龄相同则通过 id 进行排序
		List<Student> c17 = students.stream()
				.sorted(Comparator.comparing(Student::getAge).thenComparing(Student::getId))
				.collect(Collectors.toList());

		// anyMatch:检查集合中是否至少匹配一个元素
		// 检查集合 strings 中是否有包含 bc 的元素
		boolean b1 = strings.stream().anyMatch(str -> str.contains("bc"));

		// 检查集合 students 中是否有同学成绩不存在
		boolean b2 = students.stream().anyMatch(stu -> stu.getScore() == null);

		// allMatch:检查是否匹配所有元素,返回 boolean
		// 检查集合中的元素是否都大于 0
		boolean b3 = ints.stream().allMatch(i -> i > 0);

		// reduce:将流中元素反复结合起来,得到一个值
		/**
		 * acc:初始化值,默认为 null ; item:集合中的元素
		 */
		Optional<String> reduce1 = strings.stream().reduce((acc, item) -> {
			return acc + item;
		});
		reduce1.ifPresent(System.out::println);
		// 获取集合 students 的总体成绩
		Optional<Integer> reduce2 = students.stream().map(stu -> stu.getScore() == null ? 0 : stu.getScore())
				.reduce(Integer::sum);
		reduce2.ifPresent(System.out::println);

		// count:集合元素数量统计
		long l1 = strings.stream().count();
		// 统计成绩大于 90 的分同学的个数
		long l2 = students.stream().filter(stu -> (stu.getScore() == null ? 0 : stu.getScore()) > 90).count();

		// 【错误写法】返回统计是Boolean的数量
		List<Boolean> collect = students.stream().map(stu -> (stu.getScore() == null ? 0 : stu.getScore()) > 90)
				.collect(Collectors.toList());

		// Stream.of 初始化集合
		List<String> list = Stream.of("1", "2", "3").collect(Collectors.toList());
		System.out.println("list = " + list);

		// peek
		// 将学生成绩为空的同学记上 0 分 返回
		List<Student> peekStudents = students.stream().filter(student -> student.getScore() == null)
				.peek(student -> student.setScore(0)).collect(Collectors.toList());
		System.out.println("peekStudents = " + peekStudents);

	}

	/**
	 * 字符串转换为字符流
	 */
	public static Stream<Character> getCharacterByString(String str) {
		List<Character> characterList = new ArrayList<>();
		for (Character character : str.toCharArray()) {
			characterList.add(character);
		}
		return characterList.stream();
	}

	{
		strings = Arrays.asList("abc", "0", "bc", "for", "bc", "e fg", "jse", "Ff", "jkl", "886");
		ints = Arrays.asList(100, 84, 66, 5, 41, 2, 0, -7, 88, -201);
		names = Arrays.asList("张三", "李四", "王二", "麻子", "翠花", "壮壮", "狗蛋", "小红");
		students = new ArrayList<>();
		students.add(new Student(1, "米大傻", 18, 90));
		students.add(new Student(2, "米二傻", 18, 91));
		students.add(new Student(3, "米三傻", 19, 92));
		students.add(new Student(4, "米四傻", 18, null));
		students.add(new Student(5, "米五傻", 20, 88));
		students.add(new Student(6, "米六傻", 18, 98));
		students.add(new Student(7, "米七傻", 21, 100));
		students.add(new Student(7, "米七傻", 21, 100));
		students.add(new Student(9, "米九傻", 19, 73));
		students.add(new Student(10, "米十傻", 22, 90));
	}

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

		private Integer id;
		private String name; // 姓名
		private Integer age; // 年龄
		private Integer score; // 成绩

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

		public Integer getId() {
			return id;
		}

		public void setId(Integer 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 Integer getScore() {
			return score;
		}

		public void setScore(Integer score) {
			this.score = score;
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值