参考:
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
}
}