Spliterator的简单介绍

Spliterator的简单介绍

作用是为并行提供一个可切割的spliterator,然后可以并行处理。

tryAdvance方法和forEachRemaing方法

tryAdvance进行一次iterate并且判断是否有元素还存在

forEachRemaing是对剩下的元素都执行action

private static void arraySplitDemo() {
   List<String> list = Arrays.asList("Apple", "Banana", "Orange");

   Spliterator<String> spliterator = list.spliterator();

   spliterator.tryAdvance(System.out::println);

   System.out.println("-- buld traversal");
   spliterator.forEachRemaining(System.out::println);

   System.out.println("--- attempting try advance again");
   System.out.println(spliterator.tryAdvance(System.out::println));
}
trySplit方法

split分成两个,返回新的一个

  List<String> list = Arrays.asList("Apple", "Banana", "Orange");

  Spliterator<String> s = list.spliterator();
  Spliterator<String> s1 = s.trySplit();

  s.forEachRemaining(System.out::println);
  System.out.println("-- traversing the other half of the spliterator --- ");
  s1.forEachRemaining(System.out::println);
characteristics() and hasCharacteristics()

这是对某种特性的集合是否拥有哪个特点进行判断

public static void main (String[] args) {
        List<String> list = new ArrayList<>();

        Spliterator<String> s = list.spliterator();

        if(s.hasCharacteristics(Spliterator.ORDERED)){
            System.out.println("ORDERED");
        }
        if(s.hasCharacteristics(Spliterator.DISTINCT)){
            System.out.println("DISTINCT");
        }
        if(s.hasCharacteristics(Spliterator.SORTED)){
            System.out.println("SORTED");
        }
        if(s.hasCharacteristics(Spliterator.SIZED)){
            System.out.println("SIZED");
        }

        if(s.hasCharacteristics(Spliterator.CONCURRENT)){
            System.out.println("CONCURRENT");
        }
        if(s.hasCharacteristics(Spliterator.IMMUTABLE)){
            System.out.println("IMMUTABLE");
        }
        if(s.hasCharacteristics(Spliterator.NONNULL)){
            System.out.println("NONNULL");
        }
        if(s.hasCharacteristics(Spliterator.SUBSIZED)){
            System.out.println("SUBSIZED");
        }
    }
estimateSize() and getExactSizeIfKnown()

estimateSize() 返回一个Long姓的值,在元素数不尽或很难计算或者不知道的时候返回Long.MAX_VALUE

getExactSizeKnow() 如果这个spliterator有SIZED的特点,那么就调用estimateSize()进行返回,否则返回-1

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spliterator是Java 8中引入的一个接口,用于支持并行遍历和分割数据源(例如集合或数组)的元素。Spliterator代表了可分割迭代器,它将数据源分割成多个部分,可以并行地对这些部分进行遍历和处理。 Spliterator接口定义了以下几个主要方法: 1. `boolean tryAdvance(Consumer<? super T> action)`:尝试遍历下一个元素并应用给定的操作。如果有可用的元素,则返回true,否则返回false。 2. `void forEachRemaining(Consumer<? super T> action)`:对剩余的每个元素应用给定的操作,直到所有元素都被处理或者发生异常。 3. `Spliterator<T> trySplit()`:尝试将元素分割成两个独立的Spliterator,以支持并行遍历。如果成功分割,则返回一个新的Spliterator,否则返回null。 4. `long estimateSize()`:估计剩余元素的数量。 5. `int characteristics()`:返回Spliterator的特性标志,例如ORDERED(有序)、DISTINCT(去重)、SIZED(大小已知)等。可以使用`Spliterator.ORDERED`、`Spliterator.DISTINCT`、`Spliterator.SIZED`等常量来检查特定的特性。 Spliterator接口可以与Java 8中的流(Stream)一起使用,以支持并行操作和并行计算。通过将数据源转换为流,并使用`stream.spliterator()`方法获取Spliterator实例,可以对数据源进行并行遍历和处理。 需要注意的是,使用Spliterator进行并行遍历时,需要确保数据源是线程安全的,以避免并发访问导致的问题。 希望以上信息能够帮助到您!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值