当前位置: 首页 > 知识库问答 >
问题:

spliterator中action.accept(val)的作用

吕扬
2023-03-14

我不明白action.accept(val)是做什么的,我已经搜索过了,我知道必须这样做,只是不知道为什么。
下面是一个我不明白的简单示例:

public class CachedSpliterator <T> extends Spliterators.AbstractSpliterator 
{
    Spliterator<T> spliterator;
    int index;
    ArrayList<T> cache;

public CachedSpliterator(Spliterator<T> spliterator, ArrayList<T> cache) {
    super(spliterator.characteristics(), 0);
    this.spliterator=spliterator;
    index=0;
    this.cache=cache;
}

public boolean tryAdvance(Consumer action){         
    if(index<cache.size()){ 
        action.accept(cache.get(index));       
        index++;                                
        return true;                            
    }
    else{
        return spliterator.tryAdvance(val->{    

            cache.add(val);
            index++;                            
            action.accept(val);
        });
    }
}

例如,在这段代码中,我理解我们有一个消费者,它从一个源(在本例中是spliterator)消费每个元素,每个元素都必须被动作接受。所以在我看来,操作是cache.add(val)和变量index的增量,我不明白为什么最后一行(action.accept(val))必须写出来。谢谢.

共有1个答案

乌修筠
2023-03-14

动作是对数据执行的用户定义函数,用于CachedSpliterator的用户。增量和添加到缓存是该类内部逻辑的一部分。
例如:

CachedSpliterator spliterator = new CachedSpliterator(...);
spliterator.tryAdvance(item -> {
    // Will execute this code on every item from the source
    // Can perform any logic here, like save to a database
    db.save(item);   
});
 类似资料:
  • 描述 (Description) val( val )方法设置每个匹配元素的输入值。 如果在单选按钮,复选框或选择选项上调用此方法,则它将检查或选择传递的值。 语法 (Syntax) 以下是使用此方法的简单语法 - <i>selector</i>.val( val ) 参数 (Parameters) 以下是此方法使用的所有参数的说明 - val - 如果在“input”上调用它,但是如果在“s

  • 这是在我编写自定义< code>Spliterator时出现的。我知道我应该覆盖< code>estimateSize,如果我知道大小,即使是一个近似值。通常,我会的。但是还有< code>getExactSizeIfKnown并且我知道它的默认实现: 现在,假设我正在处理一个(我知道它已经存在,这不是重点)。我应该覆盖或还是两者兼而有之? 在内部,我猜<code>getExactSizeIfKn

  • 问题内容: 我在理解Java 8中的接口时遇到了麻烦,尤其是在与and 接口有关的地方。我的问题是我根本无法理解和接口的是,作为一个结果,接口仍然有些模糊了我。 和和到底是什么,我如何使用它们?如果我愿意写我自己或(和可能是我自己在这个过程中),我应该怎样做和不能做? 我阅读了一些分散在网络上的示例,但是由于此处的所有内容仍然是新内容并且随时可能更改,因此示例和教程仍然非常稀疏。 问题答案: 几乎

  • 描述 (Description) val( )方法获取第一个匹配元素的输入值。 语法 (Syntax) 以下是使用此方法的简单语法 - <i>selector</i>.val( ) 参数 (Parameters) 以下是此方法使用的所有参数的说明 - NA 例子 (Example) 下面的示例将设置第二段中第一个输入框的HTML内容 - <html> <head> <titl

  • 哪些流操作使用、和拆分器特性?它们在这些操作中如何发挥作用? 我不是问这些标志是什么,这在文档中很容易找到。我在问哪些操作使用它们以及如何使用它们。

  • 为了试图深入理解Java流和spliterator,我有一些关于spliterator特性的微妙问题: Q1:与(不带参数的stream.of()) :已沉降,大小 :沉降的、不可变的、有大小的、有序的 为什么不具有相同的特性?请注意,当它与stream.concat()结合使用时(特别是没有)会产生影响。我想说不仅应该具有不可变和有序性,而且还应该具有DISTINCT和nonnull。只有一个参