gpt4 book ai didi

java - 修改 lambda 表达式中的变量

转载 作者:行者123 更新时间:2023-11-30 06:11:57 29 4
gpt4 key购买 nike

我正在尝试将 for 循环转换为基于 java-8 forEach 的语句。循环在遇到数组中的 '\n' 字符时中断,然后还返回数组中该位置的索引。

protected Integer skipLine(byte[] buf,Integer len, Integer i) {
for(;i<len;i++) {
if(buf[i] == '\n') {
newLine();
return ++i;
}
}
return i;
}

Java-8 等价物:

protected Integer skipLine(byte[] buf,Integer len, Integer i) {
IntStream stream = IntStream.range(i, len).map(j -> buf[j]); // this is necessary because there's no ByteStream
stream.forEach(??);
return i;
}

最佳答案

下面的方法会返回你想要的结果。

它创建一个 IntStreamilen 独占(在 range 的帮助下),然后过滤等于 \n 的缓冲区元素(在 filter 的帮助下)。找到一个时,将调用 newLine()。因为我们只对第一个感兴趣,所以我们调用 findFirst() .如果没有找到,那么我们返回 len(在 orElse 的帮助下)。

protected Integer skipLine(byte[] buf,Integer len, Integer i) {
return IntStream.range(i, len)
.filter(n -> buf[n] == '\n')
.peek(n -> newLine())
.findFirst()
.orElse(len-1) + 1;
}

作为旁注,您应该将输入参数更改为 int 而不是 Integer (同样,返回 int 整数)。

关于java - 修改 lambda 表达式中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33439630/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com