zoukankan      html  css  js  c++  java
  • Java Stream流的使用

    Java 8 新增的 Stream 是为了解放程序员操作集合(Collection)时的生产力,配合lambda使用效果翻倍,但是我不喜欢lambda,特别是看别人写的lambda

    	@Test
    	public void testStream() {
    		String name[] = {"刘哈哈", "jk", "fd", "jk"};
    		List<String> strings = Arrays.asList(name);
    
    		/**
    		 * distinct() 方法是一个中间操作(去重),它会返回一个新的流(没有共同元素)
    		 * count() 方法是一个终端操作,返回流中的元素个数。
    		 */
    		int cout = (int) strings.stream().distinct().count();
    		System.out.println(cout);
    
    		/**
    		 * 操作流:过滤
    		 * 通过filter()方法从流中筛选出想要的元素
    		 */
    		Stream<String> stream1 = strings.stream().filter(ss -> ss.contains("j"));
    		stream1.forEach(System.out::println);
    
    		/**
    		 * 操作流:映射
    		 * 使用 map() 方法把一个流中的元素转化成新的流中的元素
    		 */
    		Stream<Integer> stream2 = strings.stream().map(String::length);
    		stream2.forEach(System.out::println);
    
    		/**
    		 * 操作流:匹配
    		 * anyMatch(),只要有一个元素匹配传入的条件,就返回 true。
    		 * allMatch(),只有有一个元素不匹配传入的条件,就返回 false;如果全部匹配,则返回true。
    		 * noneMatch(),只要有一个元素匹配传入的条件,就返回 false;如果全部不匹配,则返回 true。
    		 */
    		boolean anyMatchFlag = strings.stream().anyMatch(ss -> ss.contains("刘"));
    		boolean allMatchFlg = strings.stream().allMatch(ss -> ss.length()>1);
    		boolean noneMatchFlg = strings.stream().noneMatch(ss -> ss.endsWith("p"));
    		System.out.println(anyMatchFlag);
    		System.out.println(allMatchFlg);
    		System.out.println(noneMatchFlg);
    
    		/**
    		 * 操作流:组合
    		 * reduce() 方法的主要作用是把 Stream 中的元素组合起来,它有两种用法:
    		 *  Optional没有起始值,只有一个参数,就是运算规则,此时返回 Optional。
    		 *  T reduce(T identity, BinaryOperator有起始值,有运算规则,两个参数,此时返回的类型和起始值类型一致。
    		 */
    		Integer ints[] = {1,2,3};
    		List<Integer> list = Arrays.asList(ints);
    
    		// 没有起始值,返回Optional类型
    		Optional<Integer> optional = list.stream().reduce((a,b) -> a+b);
    		Optional<Integer> optional2 = list.stream().reduce(Integer::sum);
    		System.out.println(optional);
    		System.out.println(optional2);
    
    		// 有起始值,返回参数类型
    		int reduce = list.stream().reduce(3,(a,b) -> a+b);
    		int reduce2 = list.stream().reduce(3,Integer::sum);
    		System.out.println(reduce);
    		System.out.println(reduce2);
    
    		/**
    		 * 操作流:转换
    		 * 将流转换回集合、数组、以及其他指定类型
    		 */
    		List<String> listName = new ArrayList<>();
    		listName.add("张三");
    		listName.add("李四");
    		listName.add("王五");
    
    		// 流转数组
    		// String []::new 是一个可以产生所需数组的函数
    		String[] strArray = listName.stream().toArray(String []::new);
    		System.out.println(Arrays.toString(strArray));
    
    		// 流转集合
    		List<Integer> streamToListIn = listName.stream().map(String::length).collect(Collectors.toList());
    		List<String> streamToListStr = listName.stream().collect(Collectors.toList());
    		System.out.println(streamToListIn);
    		System.out.println(streamToListStr);
    
    		// 流转指定类型
    		// joining() 方法将元素收集到一个可以用分隔符指定的字符串中
    		String str = listName.stream().collect(Collectors.joining(",")).toString();
    		System.out.println(str);
    
    	}
    
    

    image

  • 相关阅读:
    logback 打印mybatis sql mybatis 日志打印sql语句和返回结果
    SpringBoot使用logback输出日志并打印sql信息 --经典---
    Logback设置SQL参数打印
    springboot2.X整合mybatis
    异常解决:java.lang.IllegalStateException: Failed to introspect Class
    springboot 启动报错 java.lang.IllegalStateException: Failed to introspect annotated methods on class org
    数据库相关中间件介绍
    QWaitCondition 的正确使用方法(通过 mutex 把有严格时序要求的代码保护起来,同时把 wakeAll() 也用同一个 mutex 保护起来)
    对生产者和消费者问题的另一个解决办法是使用QWaitCondition(封装好了wakeOne,wakeAll,而且与QReadWriteLock对接,几乎是万能的办法)
    Linux定时器的使用(三种方法)
  • 原文地址:https://www.cnblogs.com/lyd447113735/p/14959242.html
Copyright © 2011-2022 走看看