【Java-8】java8简单介绍Demo

package com.wjk.demo.test;

import java.util.*;
import java.util.stream.Collectors;

/**
 * java 8 新特性Demo-Stream
 * Stream(流)是一个来自数据源的元素队列并支持聚合操作
 * 元素:是特定类型的对象,形成一个队列。Java中的Stream并不会存储元素,而是按需计算。
 * 数据源 :流的来源。可以是集合,数组,I/O channel,产生器generator等。
 * 聚合操作: 类似SQL语句一样的操作,比如filter, map, reduce, find,match, sorted等。
 * 基本特性:1、PipeLining:中间操作都会返回流对象本身;
 * 2、内部迭代:以前对集合遍历都是通过Iterator或者For-Each的方式,
        显式的在集合外部进行迭代,这叫做外部迭代
 */
public class java8TestDemo {
    public static void main(String[] args) {

        //生成流,stream()-为集合创建串行流,parallelStream()−为集合创建并行流。
        /*List strings = Arrays.asList("abc", "", "bc", "efg", "abcd", "", "jkl");
        List filtered = strings.stream().
                filter(string -> !string.isEmpty()).collect(Collectors.toList());*/

        /**
         *   'forEach' 迭代流中的每个数据。使用forEach 输出了10个随机数
         *   limit 方法用于获取指定数量的流。
         *   map 方法用于映射每个元素到对应的结果.
         *   filter 方法用于通过设置条件过滤出元素
         *   sorted 方法用于对流进行排序
         *   Collectors 类实现了很多归约操作,例如将流转换成集合和聚合元素。
        Collectors可用于返回列表或字符串:
         */
        // 'forEach' 来迭代流中的每个数据。使用forEach 输出了随机数,limit 方法用于限制数据数量
        //Random random = new Random();
        //random.ints(10,100).limit(10).forEach(System.out::println);

        //map 输出了元素对应的平方数
        List numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
        // 获取对应的平方数
        List squaresList = numbers.stream().
            map(i -> i * i).distinct().collect(Collectors.toList());
        //System.out.println(squaresList);

        //使用filter 方法过滤出空字符串:
        List strs = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
        int count = (int) strs.stream().filter(string -> string.isEmpty()).count();
        //System.out.println("空串数量"+count);

        //sorted 方法对输出的 10 个随机数进行排序
        Random random = new Random();
        //random.ints(20,100).limit(10).sorted().forEach(System.out::println);

        //将流转换成集合和聚合元素。Collectors可用于返回列表或字符串:
        List strings = Arrays.asList("abc", "", "bc", "efg", "abcd", "", "jkl");
        List filtered = strings.stream().
            filter(string -> !string.isEmpty()).collect(Collectors.toList());
        //System.out.println("筛选列表: " + filtered);
        String mergedString = strings.stream().
            filter(s -> !s.isEmpty()).collect(Collectors.joining(", "));
        //System.out.println("合并字符串: " + mergedString);


        List> listMap = new ArrayList<>();
        for (int i=0;i<5;i++){
            Map map = new HashMap<>();
            map.put("x","1"+i);
            map.put("y","y"+i);
            listMap.add(map);
        }
        System.out.println(listMap);

        /**
         * 使用toMap()函数之后,返回的就是一个Map了,自然会需要key和value。
         toMap()的第一个参数就是用来生成key值的,第二个参数就是用来生成value值的。
         第三个参数用在key值冲突的情况下:如果新元素产生的key在Map中已经出现过了,
            第三个参数就会定义解决的办法。
         */
        Map map1 = listMap.stream().
        filter(s -> s.get("x").equals("10"))
                .collect(Collectors.
        toMap(s->(String)s.get("x"),s->(String)s.get("y"),(s1,s2)->s1));
        System.out.println(map1);


    }
}

 

你可能感兴趣的:(Java-8)