Stream findfirst Java 8中的递增计数器

时间:2019-05-30 00:20:22

标签: java java-stream counter findfirst

有一个原始文本存储在ArrayList中。为了从顶部清除不需要的行,我需要找到包含某个标签的字符串的索引。

标记不是完整的字符串,只是一个子字符串。这意味着我不能使用myArrayList.indexOf(“开始标记”)
(indexOf只查找完整的字符串)

我试图在流上放置一个计数器,对它处理的String进行计数,直到找到标记,但是它不起作用。

使用for循环,我可以找到索引,但这很慢且很丑陋(也给了一些内存错误)。

通过过滤器流式处理ArrayList,并让流返回包含标记的String,这给了我所需的完整String。 具有完整的字符串将启用ArrayList.indexOf方法。

所有功能现在都可以使用,但是我仍然想知道如何在流上设置计数器。

For-loop(可行,但难看):

    for(String s : myArrayList)
    {
        if(s.contains("marker text"))
        {
            break;
        }
        else counter++;
    }

查找完整的字符串(不错的解决方法):

    String markerText = myArrayList.stream().filter(s -> s.contains("marker text")).
    findFirst().orElse("marker not found");
    int x = myArrayList.indexOf(markerText); 

这不起作用:

    int counter = 0;
    myArrayList.stream().peek(counter++).
    filter(s -> s.contains("marker text")).findFirst();

这不会编译,因为peek()拒绝对整数x进行运算。

我还尝试过将x强制转换为AtomicInteger并调用getAndIncrement()方法。这也不起作用。

我看到了很多类似的主题,但是它们都使用foreach方法。有人可以告诉我我在做什么错吗?

1 个答案:

答案 0 :(得分:0)

您可以使用df.drop('LIKES',axis=1,inplace=True) 在同一行中获取索引:

IntStream

然后使用它:

OptionalInt index = IntStream.range(0, list.size()).filter(i -> list.get(i).contains("marker text")).findFirst();