ラムダ式の概要-ストリームの作成と一般的な方法

1つ、ストリームストリーミング:

  1. ストリームストリーミングは、ラムダに基づくマルチデータ処理テクノロジーです。
  2. ストリームはコレクションデータ処理を高度に抽象化し、コードの量を大幅に簡素化します

  3. ここに画像の説明を挿入
    Streamは、重複排除、フィルタリング、並べ替え、集計など、コレクションに対して一連の処理を実行できます。次に、Stream
    PSを作成する5つの方法:最初の2つが最も一般的に使用され、後者は理解できます。
 // 基于数组进行创建
    @Test
    public void generator1() {
    
    
        String[] str = {
    
    "lucy", "lily", "jack"};
        Stream<String> stream = Stream.of(str);
        stream.forEach(s -> System.out.println(s));
    }
 // 基于集合进行创建
    @Test
    public void generator2() {
    
    
        List<String> list = new ArrayList<>();
        list.add("lucy");
        list.add("Lily");
        list.add("jack");
        Stream<String> stream = list.stream();
        stream.forEach(s -> System.out.println(s));
    }

 // 利用generator方法创建无线长度流
    @Test
    public void generator3() {
    
    
        Stream<Integer> stream = Stream.generate(() -> new Random().nextInt(1000));
        // 持续进行输出
//        stream.forEach(i -> System.out.println(i));
        // 加上limit做限制以后,输出个数为limit参数设置的长度
        stream.limit(10).forEach(i -> System.out.println(i));
    }

 //基于迭代器创建流
    @Test
    public void generator4() {
    
    
        Stream<Integer> stream = Stream.iterate(1, n -> n + 1);
        // 持续进行输出
//        stream.forEach(i -> System.out.println(i));
        // 加上limit做限制以后,输出个数为limit参数设置的长度
        stream.limit(10).forEach(i -> System.out.println(i));
    }
 // 基于字符序列创建流
    @Test
    public void generator5() {
    
    
        String str = "abcdefg";
        IntStream stream = str.chars();
        // 输出的整数是字符的ASCII码,如果需要转换成中文,可以加上charAt
//        stream.forEach(i -> System.out.println(i));
        stream.forEach(i -> System.out.println((char) i));
    }

一般的に使用される3つの方法:

インターフェース 使用する
foreach ループトラバーサル
地図 mapメソッドは、各要素を対応する結果にマップするために使用されます
フィルタ フィルタ方式は、設定された条件で要素を除外するために使用されます
制限 制限方法は、指定された数のストリームを取得するために使用されます
ソート済み ソートされたメソッドは、ストリームをソートするために使用されます
コレクター Collectorsクラスは、ストリームのコレクションおよび集約要素への変換を実装します
// 提取集合中所有偶数的和
    @Test
    public void demo1() {
    
    
        List<String> list = Arrays.asList("1", "2", "3", "4", "5", "6");
        int sum = list.stream()
                .mapToInt(n -> Integer.parseInt(n))//转为整型数组
                .filter(n -> n % 2 == 0)  // 过滤器,过滤到无用的数字
                .sum();  // 求和
        System.out.println(sum);
    }

 // 所有名字首字母大写
    @Test
    public void demo2() {
    
    
        List<String> list = Arrays.asList("lucy", "lily", "jack", "lucy");
        List newList = list.stream()
                .map(s -> s.substring(0, 1).toUpperCase() + s.substring(1)) //按规则对每一个流数据进行转换
                .collect(Collectors.toList());// collect对数据进行收集,转为list数组,如需过滤重复,可以用set方法,如下
        System.out.println(newList);
    }
  
 @Test
    public void demo3() {
    
    
        List<String> list = Arrays.asList("lucy", "lily", "jack", "lucy");
        Set newSet = list.stream()
                .map(s -> s.substring(0, 1).toUpperCase() + s.substring(1))
                .collect(Collectors.toSet());
        System.out.println(newSet);
    }
 // 将所有奇数进行从大到小的排序,且不允许重复
    @Test
    public void demo4() {
    
    
        List<Integer> list = Arrays.asList(100, 31, 35, 13, 31, 100, 23);
        List newList = list.stream()
                .distinct()  //去重
                .filter(s -> s % 2 == 1) // 求奇数
                .sorted((a, b) -> b - a)  // 从大到小进行排序,A代表前一个数据,b代表后一个数据,b-a表示数据从大到小进行排列
                .collect(Collectors.toList()); // 转换成集合
        System.out.println(newList);
    }

おすすめ

転載: blog.csdn.net/qq_36792120/article/details/112099790