• java---Stream流


    Stream流的生成方式
    1. package Stream流;
    2. /*
    3. Stream流的生成方式
    4. Stream流的常见生成方式
    5. 1,Collection体系的集合可以使用默认方法stream()生成流
    6. default Stream<E> stream()
    7. 2,Map体系的集合间接的生成流
    8. 3,数组可以通过Stream接口的静态方法 of(T…values)生成流
    9. */
    10. import java.util.*;
    11. import java.util.stream.Stream;
    12. public class Stream流的生成方式 {
    13. public static void main(String[] args) {
    14. //Collection体系的集合可以使用默认方法stream()生成流
    15. List<String> list = new ArrayList<String>();
    16. Stream<String> listStream = list.stream();
    17. Set<String> set = new HashSet<String>();
    18. Stream<String> setStream = set.stream();
    19. //Map体系的集合间接的生成流
    20. Map<String, String> map = new HashMap<String, String>();
    21. Stream<String> keyStream = map.keySet().stream();
    22. Stream<String> valueStrean = map.values().stream();
    23. Stream<Map.Entry<String, String>> entryStream = map.entrySet().stream();
    24. //数组可以通过Stream接口的静态方法 of(T…values)生成流
    25. String[] strArray={"hello", "world", "java"};
    26. Stream<String> strArrayStream = Stream.of(strArray);
    27. Stream<String> strArrayStream2 = Stream.of("hello", "world", "java");
    28. Stream<Integer> intStream = Stream.of(10, 20, 30);
    29. }
    30. }
    Stream流中常见的中间操作方法
    1. package Stream流;
    2. /*
    3. 1,Stream <T> filter(Predicate predicate):用于对流中的数据进行过滤
    4. Predicate接口中的方法 boolean test(T t):对给定的参数进行判断,返回一个布尔值
    5. 2,Stream <T> limit(long maxSize):返回此流中的元素组成的流,截取前指定参数个数的数据
    6. 3,Stream <T> skip(long n):跳过指定参数个数的数据,返回由该流的剩余元素组成的流
    7. 4,static <T> Stream <T> concat(Stream a,Stream b):合并a和b两个流为一个流
    8. 5,Stream <T> distinct):返回由该流的不同元素(根据Object.equals(Object))组成的流 Stream<T>sorted0:返回由此流的元素组成的流,根据自然顺序排序
    9. */
    10. import java.util.ArrayList;
    11. import java.util.stream.Stream;
    12. public class Stream流中常见的中间操作方法 {
    13. public static void main(String[] args) {
    14. //创建一个集合,存储多个字符串元素
    15. ArrayList<String> list = new ArrayList<String>();
    16. list.add("萧炎");
    17. list.add("药老");
    18. list.add("海波东");
    19. list.add("萧熏儿");
    20. list.add("萧战");
    21. list.add("云韵");
    22. //需求1:把list集合中以张开头的元素输出在控制台
    23. list.stream().filter(s -> s.startsWith("萧")).forEach(System.out::println);
    24. System.out.println("--------");
    25. //需求2:把list集合中长度为3的元素在控制台输出
    26. list.stream().filter(s->s.length()==3).forEach(System.out::println);
    27. System.out.println("--------");
    28. //需求3:把list集合中的以萧开头的,长度为3的元素输出在控制台
    29. list.stream().filter(s->s.length()==3).filter(s->s.startsWith("萧")).forEach(System.out::println);
    30. System.out.println("--------");
    31. //需求4,取前3个数据在控制台输出
    32. list.stream().limit(3).forEach(System.out::println);
    33. System.out.println("--------");
    34. //需求5:跳过3个元素,把剩下的元素在控制台输出
    35. list.stream().skip(3).forEach(System.out::println);
    36. System.out.println("--------");
    37. //需求6:跳过2个元素,把剩下的元素中的前2个在控制台输出
    38. list.stream().skip(2).limit(2).forEach(System.out::println);
    39. System.out.println("--------");
    40. //需求7:取前4个组成一个流
    41. Stream<String> s1 = list.stream().limit(4);
    42. //跳过2个数据组成一个流
    43. Stream<String> s2 = list.stream().skip(2);
    44. //合并s1和s2,把结果输出在控制台
    45. /* Stream.concat(s1, s2).forEach(System.out::println);
    46. System.out.println("--------");*/
    47. //合并s1和s2,把结果输出在控制台,要求字符串不能重复
    48. Stream.concat(s1, s2).distinct().forEach(System.out::println);
    49. }
    50. }

     

    1. package Stream流;
    2. /*
    3. 1,Stream <T> sorted():返回由此流的元素组成的流,根据自然顺序排序
    4. 2,Stream <T> sorted(Comparator comparator):返回由该流的元素组成的流,根据提供的Comparator进行排序
    5. 3,<R> Stream <R> map(Function mapper):返回由给定函数应用于此流的元素的结果组成的流
    6. Function接口中的方法 R apply(T t)
    7. 4,IntStream map ToInt(ToIntFunction mapper):返回一个IntStream其中包含将给定函数应用于此流的元素的结果
    8. */
    9. import java.util.ArrayList;
    10. public class Stream流中常见的中间操作方法2 {
    11. public static void main(String[] args) {
    12. //创建一个集合,存储多个字符串元素
    13. ArrayList<String> list = new ArrayList<String>();
    14. list.add("xiaoyan");
    15. list.add("yaolao");
    16. list.add("haibodong");
    17. list.add("xiaoxuner");
    18. list.add("xiaozhan");
    19. list.add("yunyun");
    20. //需求1:按照字母顺序把数据输出在控制台
    21. list.stream().sorted().forEach(System.out::println);
    22. System.out.println("--------");
    23. //需求2:按照字符串长度顺序把数据输出在控制台
    24. list.stream().sorted((s1, s2) ->{
    25. int num = s1.length()-s2.length();
    26. int num2=num==0 ? s1.compareTo(s2) : num;
    27. return num2;
    28. }).forEach(System.out::println);
    29. //创建一个集合,存储多个字符串元素
    30. ArrayList<String> list2 = new ArrayList<String>();
    31. list2.add("10");
    32. list2.add("20");
    33. list2.add("30");
    34. list2.add("40");
    35. list2.add("50");
    36. //需求:将集合的字符串数据转换为整数之后在控制台输出
    37. list2.stream().map(s->Integer.parseInt(s)).forEach(System.out::println);
    38. list2.stream().map(Integer::parseInt).forEach(System.out::println);
    39. list2.stream().mapToInt(Integer::parseInt).forEach(System.out::println);
    40. //int sum() 返回此流中元素的总和
    41. int result = list2.stream().mapToInt(Integer::parseInt).sum();
    42. System.out.println(result);
    43. }
    44. }
    Stream流的常见的终结操作方法
    1. package Stream流;
    2. /*
    3. Stream流的常见终结操作方法
    4. void forEach(Consumer action):对此流的每个元素执行操作
    5. Consumer接口中的方法 void accept(T t):对给定的参数执行此操作
    6. long count()返回此流中的元素数
    7. */
    8. import java.util.ArrayList;
    9. public class Stream流的常见的终结操作方法 {
    10. public static void main(String[] args) {
    11. //创建一个集合,存储多个字符串元素
    12. ArrayList<String> list = new ArrayList<String>();
    13. list.add("萧炎");
    14. list.add("药老");
    15. list.add("海波东");
    16. list.add("萧熏儿");
    17. list.add("萧战");
    18. list.add("云韵");
    19. //需求1:把集合中的元素在控制台输出
    20. list.stream().forEach(System.out::println);
    21. //需求2:统计集合中有几个以萧开头的元素,把统计结果在控制台输出
    22. long count = list.stream().filter(s -> s.startsWith("萧")).count();
    23. System.out.println(count);
    24. }
    25. }
    Stream流的收集操作
    1. package Stream流;
    2. /*
    3. Stream流的收集操作
    4. 对数据使用Stream流的方式操作完毕后,我想把流中的数据收集到集合中,该怎么办呢?
    5. Stream流的收集方法
    6. R collect(Collector collector)
    7. 但是这个收集方法的参数是一个Collector接口
    8. 工具类Collectors提供了具体的收集方式
    9. public static<T>Collector toList):把元素收集到List集合中
    10. public static<T>Collector toSet):把元素收集到Set集合中
    11. public static Collector toMap(Function keyMapper,Function valueMapper):把元素收集到Map集合中
    12. */
    13. import java.util.*;
    14. import java.util.stream.Collectors;
    15. import java.util.stream.Stream;
    16. public class Stream流的收集操作 {
    17. public static void main(String[] args) {
    18. //创建一个集合,存储多个字符串元素
    19. List<String> list = new ArrayList<String>();
    20. list.add("萧炎");
    21. list.add("药老");
    22. list.add("海波东");
    23. list.add("萧熏儿");
    24. //需求1:得到名字为3个字的流
    25. Stream<String> listStream = list.stream().filter(s -> s.length() == 3);
    26. //需求2:把使用Stream流操作完毕的数据收集到List集合中并遍历
    27. List<String> names = listStream.collect(Collectors.toList());
    28. for(String name:names){
    29. System.out.println(name);
    30. }
    31. //创建set集合
    32. Set<Integer> set = new HashSet<Integer>();
    33. set.add(10);
    34. set.add(20);
    35. set.add(30);
    36. set.add(40);
    37. set.add(50);
    38. //需求3:得到年龄大于25的流
    39. Stream<Integer> setStream = set.stream().filter(s -> s > 25);
    40. //需求4:把使用Stream流操作完毕的数据收集到set集合中并遍历
    41. Set<Integer> ages = setStream.collect(Collectors.toSet());
    42. for(Integer age : ages) {
    43. System.out.println(age);
    44. }
    45. //定义一个字符串数组,每一个字符串数组由姓名和年龄数据组合而成
    46. String[] strArray={"萧炎,19","药老,50","海波东,40","萧熏儿,18"};
    47. //需求5:得到年龄大于28的流
    48. Stream<String> arrayStream = Stream.of(strArray).filter(s -> Integer.parseInt(s.split(",")[1]) > 28);
    49. //需求6:把使用Stream流操作完毕的数据收集到Map集合中并遍历,字符串中的姓名作键,年龄作值
    50. Map<String, Integer> map = new HashMap<String, Integer>();arrayStream.collect(Collectors.toMap(s -> s.split(",")[0], s -> Integer.parseInt(s.split(",")[1]) > 28));
    51. Set<String> keySet=map.keySet();
    52. for(String key : keySet) {
    53. Integer value = map.get(key);
    54. System.out.println(key+","+value);
    55. }
    56. }
    57. }

  • 相关阅读:
    [mit6.1810] Lab system calls
    教你使用java彻底掌握 “约瑟夫环”
    matlab去除图片上的噪声
    信噪比和比特误码率之间的关系通过matlab仿真计算出
    牛客网AI面试第五轮
    与大语言模型Transformer的奇妙旅程
    SSRF漏洞
    Git常用指令-1
    软件测试面试必问:为什么要选择软件测试?
    想学设计模式、想搞架构设计,先学学 UML 系统建模吧
  • 原文地址:https://blog.csdn.net/z2021_000000/article/details/125526912