Java8 新特性中的Stream,如何按照条件替换原来stream中的数据?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java8 新特性中的Stream,如何按照条件替换原来stream中的数据?相关的知识,希望对你有一定的参考价值。

filter只能对满足一种条件的元素执行操作,我想设置多种条件,每种条件执行不同操作,如何做?

例如: RawDataList中存放的是 物品名称,有的名称包含".",有的不包含
1.将所有包含"."的物品名中的"."去掉,并生成新的List
2.将所有名称长度>2的物品名,只保留最后的2个字符
3.按照以下代码,我可以分部完成,但是如何一次性解决呢?

RawDataList.stream().filter(e -> e.contains("."))
.map(e -> e.substring(0, e.lastIndexOf(".")))
.collect(Collectors.toCollection(LinkedList::new));

RawDataList.stream().filter(e -> e.length() > 2)
.map(e -> e.substring(e.length() - 2, e.length()))
.collect(Collectors.toCollection(LinkedList::new));

1、首先利用foreach()方法对Stream元素进行遍历,如下图所示。

2、利用filter()方法对Stream元素进行过滤,其中x -> x > 5为Lambda表达式,作为filter的参数。执行过滤后满足过滤条件的Stream元素将会保留。

3、利用map()方法对Stream元素进行一对一映射转换,如下图所示。

4、此外Stream对象还有很多其他非常有用的方法,可以自己尝试,如下图所示就完成了。

参考技术A 不能...你可以参考一下我在知乎上的一个回答
https://www.zhihu.com/question/50413642/answer/121075486?from=profile_answer_card本回答被提问者采纳

Java8新特性 --Stream

一、 创建Stream

  1. 创建Stream方式一: 集合类的stream()或 parallelStream()

    java List<String> list = new ArrayList<>(); Stream<String> stream = list.stream();

  2. 创建Stream方式二: 通过Arrays中的静态方法stream()获取

    String[] strings = new String[10];
    Stream<String> stream1 = Arrays.stream(strings);
  3. 创建Stream方式三: 通过Stream 类中的静态方法of()

    Stream<String> stream2 = Stream.of("aa", "bb", "cc");
  4. 创建Stream方式四: 无限流
    迭代:

    Stream<Integer> stream3 = Stream.iterate(0, (x) -> x + 2);

    生成:

    Stream.generate(() -> Math.random());

二、中间操作

  • 筛选和切片  
      filter 接受Lambda, 从stream中筛选出满足条件的元素。
      limit 限定stram中元素的数量。满足了limit数量以后,stream中以后的迭代终止,类似与短路操作。
      skip(n) 跳过元素,返回一个扔掉了前n个元素的stream。若stream中元素不足n个,则返回一个空stream。与limit(n)互补
      distinct 通过stream中元素的hashCode() 和 equels() 去除重复元素

  • 映射
      map 接受Lambda, 将元素转换成其他形式或提取信息。接受一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素。
      flatMap 接受一个函数作为参数,将stream中的每个值都换成另一个stream,然后把所有的stream连成一个stream。

  • 排序
      sorted() 自然排序 按照Comparable排序
      sorted(Comparator com) 自定义排序 按照comparator排序

  • 归约
      T reduce(T identity, BinaryOperator

  • 收集
     Optional
  1. 内部迭代: 迭代操作由Stream API完成
  2. 外部迭代: 自己写Iteriator

三、 并行流与串行流

并行流 就是把一个内容分成多个数据块,并用不同的线程分别处理每个数据块的流。Java 8 中将并行进行了优化,我们可以很容易的对数据进行并行操作。Stream API 可以声明性地通过 parallel() 与sequential() 在并行流与顺序流之间进行切换。












以上是关于Java8 新特性中的Stream,如何按照条件替换原来stream中的数据?的主要内容,如果未能解决你的问题,请参考以下文章

Java8 新特性 Stream 短路终端操作

Java8新特性第3章(Stream API)

Java8新特性 --Stream

Java8新特性 --Stream

java8新特性-Stream

java8新特性