Java stream流

参考:
1、Java8中一个极其强悍的新特性,很多人没用过(非常实用)
2、Java Stream流详解
3、Collectors.toMap 使用技巧 (List 转 Map超方便)

package com.yiyu;

import com.lkx.util.ExcelUtil;
import com.yiyu.demo.sougouImg.SougouImgPipeline;
import com.yiyu.entity.Entity1;
import com.yiyu.util.JDBCUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.LogFactory;
import org.apache.poi.util.StringUtil;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;

import static com.yiyu.util.DateUtils.formatDateTime;

public class MainTest3 {

    // https://mp.weixin.qq.com/s/xU_pTb0Y_VXN6dxT6AhJJA
    // https://blog.csdn.net/qq_54796785/article/details/131122376?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169742381716800184188891%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=169742381716800184188891&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-131122376-null-null.142^v96^pc_search_result_base6&utm_term=java%20Stream&spm=1018.2226.3001.4187
    public static void main(String[] args) throws Exception {
        //1、过滤
        // filter()方法接受一个谓词(一个返回boolean值的函数),并返回一个流,其中仅包含通过该谓词的元素。
        // 帅选出长度大于4的元素
        List<String> names = Arrays.asList("Alex", "Brian", "Charles", "David");
        //collect(Collectors.toList())则将筛选后的结果转换成一个List集合返回
        List<String> collect = names.stream().filter(item -> item.length() > 4).collect(Collectors.toList());
        // names.stream().filter(item -> item.length() > 4).forEach(System.out::println);
        System.out.println(collect);

        System.out.println("2、Map(转换)");
        //2、Map(转换)
        //map()方法可将一个流的元素转换为另一个流。它接受一个函数,该函数映射流中的每个元素到另一个元素。
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
        List<Integer> collect2 = numbers.stream().map(n -> {
            return n * 2;
        }).collect(Collectors.toList());
        System.out.println(collect2);
        // (val1, val2) -> val2) 当遇到重复的键时取最后一个值
        Map<Byte, Integer> collect3 = numbers.stream().collect(Collectors.toMap(Integer::byteValue, item -> item*2, (val1, val2) -> val2));
        System.out.println(collect3.toString());
        introduceOfCollectorstoMap();//介绍Collectors.toMap

        //3、Sorted(排序)
        //sorted()方法可对流进行排序。它可以接受一个Comparator参数,也可以使用自然排序Ordering.natural()。默认排序是按升序排序。
        int[] numbers3 = { 5, 2, 8, 3, 7 };
        int[] sortedNumbers = Arrays.stream(numbers3).sorted().toArray();
        System.out.println(Arrays.toString(sortedNumbers));

        //4、Distinct(去重)
        //distinct()方法从流中返回所有不同的元素。在内部,它使用equals()方法来比较元素是否相同。因此,我们需要确保equals()方法已正确实现。
        List<Integer> numbers4 = Arrays.asList(1, 2, 3, 2, 1);
        List<Integer> collect4 = numbers.stream().distinct().collect(Collectors.toList());
        System.out.println(collect4);

        //5、Limit(限制)
        //limit()方法可以将流限制为指定的元素数。
        List<Integer> numbers5 = Arrays.asList(1, 2, 3, 4, 5);
        List<Integer> collect5 = numbers.stream().limit(3).collect(Collectors.toList());
        System.out.println(collect5);

        //6、Skip(跳过)
        // skip()方法可跳过前N个元素。
        List<Integer> numbers6 = Arrays.asList(1, 2, 3, 4, 5);
        List<Integer> collect6 = numbers.stream().skip(2).collect(Collectors.toList());
        System.out.println(collect6);

        //7、Peek(展示)
        //peek()方法可以用于在Stream流中获取元素同时执行一些操作,如打印、调试、观察等。通常会与其他的方法联合使用。
        List<String> names7 = Arrays.asList("Alex", "Brian", "Charles", "David");
        List<String> filteredNames = names7.stream()
                .peek(System.out::println)
                .filter(name -> name.startsWith("C"))
                .peek(name -> System.out.println("Filtered value: " + name))
                .collect(Collectors.toList());
        System.out.println("-----------------------------------------------------------------");
        System.out.println(filteredNames);

        //8、forEach(循环)
        //forEach()方法可将给定的方法应用于流中的每个元素。该方法是一种消费流的方式,不会返回值。
        List<String> names8 = Arrays.asList("Alex", "Brian", "Charles", "David");
        names8.stream().forEach(System.out::println);

        //9、Collect(收集)
        //collect()方法可以将流中的元素收集到一个集合中。一般与其他方法配合使用。
        List<Integer> numbers9 = Arrays.asList(1, 2, 3, 4, 5);
        List<Integer> evenNumbers = numbers9.stream().filter(n -> n % 2 == 0).collect(Collectors.toList());
        System.out.println(evenNumbers);

        //10、Count(计数)
        // count()方法可以返回流中的元素数。
        List<String> names10 = Arrays.asList("Alex", "Brian", "Charles", "David");
        long count = names10.stream().count();
        System.out.println(count);

        //11、Reduce(聚合)
        //reduce()方法可以将流元素聚合为单个结果。它接受一个BinaryOperator参数作为累加器。
        List<Integer> numbers11 = Arrays.asList(1, 2, 3, 4, 5);
        Optional<Integer> sum = numbers11.stream().reduce((a, b) -> a + b);
        System.out.println(sum);

        //12、AnyMatch(任意匹配)
        //anyMatch()方法如果至少有一个元素与给定的谓词匹配,则返回true。
        List<String> names12 = Arrays.asList("Alex", "Brian", "Charles", "David");
        boolean anyStartsWithB = names12.stream().anyMatch(name -> name.startsWith("B"));
        System.out.println(anyStartsWithB);

        //13、AllMatch(全部匹配)
        //allMatch()方法如果所有元素都与给定谓词匹配,则返回true。
        List<String> names13 = Arrays.asList("Alex", "Brian", "Charles", "David");
        boolean allStartsWithB = names13.stream().allMatch(name -> name.startsWith("B"));
        System.out.println(allStartsWithB);

        //14、NoneMatch(无匹配)
        List<String> names14 = Arrays.asList("Alex", "Brian", "Charles", "David");
        boolean noneStartsWithB = names14.stream().noneMatch(name -> name.startsWith("E"));
        System.out.println(noneStartsWithB);
    }

    /**
     * 介绍Collectors.toMap
     */
    public static void introduceOfCollectorstoMap(){
        // https://blog.csdn.net/Resst/article/details/125835739?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169742488216800226559952%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=169742488216800226559952&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-125835739-null-null.142^v96^pc_search_result_base6&utm_term=Collectors.toMap&spm=1018.2226.3001.4187
    }


}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值