JAVA8 Stream流

本文详细介绍 Java 中 Stream API 的使用方法,包括如何从 Collection 和 Map 集合创建 Stream,以及如何利用 Stream 进行数据过滤、排序、转换和聚合操作。通过具体示例,读者可以快速掌握 Stream 的核心功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Stream流

  Collection集合生成流

      list
	List<String> list = new ArrayList<>();
	list.add("张三");
	list.add("李四");
	list.stream().filter(s -> s.contains("张")).filter(s -> s.equals("张
	三")).forEach(System.out::println);
      set
    HashSet<Object> hashSet = new HashSet<>();
    hashSet.add("qq");
    hashSet.add("qa");
    hashSet.stream().forEach(System.out::println);
      map需要间接生成流
    HashMap<String, Integer> hashMap = new HashMap<>();
    hashMap.put("aa",111);
    hashMap.put("aaa",1112);
    Stream<String> keyStream = hashMap.keySet().stream();
    Stream<Integer> valuesStream = hashMap.values().stream();
    Stream<Map.Entry<String, Integer>> stream2 = hashMap.entrySet().stream();
      数组生成流
    Stream.of("he","ee").forEach(System.out::println);
    Stream.of(1,3,10,12,4,5,7).filter(s->!s.equals(4)).forEach(System.out::println);

Stream流的一些方法

  limit获取前几个

	List<String> list = new ArrayList<>();
	list.add("aaaa");
	list.add("bbbb");
	list.add("ccccc");
	list.add("ddddd");
	list.add("eeeee");
	list.add("ffffff");
	//获取前四个数据limit
	Stream<String> limit = list.stream().limit(4);

  跳过获取skin

	Stream<String> skip = list.stream().skip(4);

 合并流concat

	Stream.concat(limit,skip).forEach(System.out::println);

 合并去重distinct

   	Stream.concat(limit,skip).distinct().forEach(System.out::println);

 自然排序sorted

	Stream.of(1,3,10,12,4,5,7).sorted().forEach(System.out::println);

 字符串长度排序

	//按照字符串长度排序,存在问题是相等的长度并没有排序
	list.stream().sorted((s1,s2)->s1.length()-s2.length())
	.forEach(System.out::println);
	//修改成下面这个方法
	list.stream().sorted((s1,s2)->{
       int num =s1.length()-s2.length();
       int num2 =num ==0?s1.compareTo(s2):num;
       return num2;
    }).forEach(System.out::println);

 map类型转换

	List<String> list2 = new ArrayList<>();
	list2.add("111");
	list2.add("111");
	list2.add("1112");
	list2.add("1113");
	list2.stream().map(Integer::parseInt).forEach(System.out::println);

 mapToInt类型转换并计算,有返回值

	int sum = list2.stream().mapToInt(Integer::parseInt).sum();
	System.out.println(sum);

 reduce加减乘除,获取最大值最小值


   //获取三个值的乘值30
   Integer sum = Stream.of(1, 3, 10).reduce(1, (x, y) -> {
     System.out.println("x=" + x + "y=" + y);
     return x * y;
     });
   System.out.println(sum);
   //获取最大值10
   Integer max = Stream.of(1, 3, 10).reduce(1, (x, y) -> {
     System.out.println("x=" + x + "y=" + y);
       return x > y ? x : y;
     });
    System.out.println(max);
   //对象的年龄最大值
   Integer maxAge = Stream.of(new Person("张三", 18),
      new Person("张三", 19),
      new Person("张三", 12),
      new Person("张三", 10)
     ).map(Person::getAge)//获取person的age值
     .reduce(0, Integer::max);//类型转化
   System.out.println(maxAge);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值