小编Dru*_*dge的帖子

Java中的Lambda函数跳过元素

我有一行我需要解析看起来像:

@UNIT,a,b,c,,,,d,e,,,

我希望Java在列表中存储以下值:

[0] => a
[1] => b
[2] => c
[3] => null
[4] => null
[5] => null
[6] => d
[7] => e
[8] => null
[9] => null
[10] => null
Run Code Online (Sandbox Code Playgroud)

我想用逗号分隔值,并用空格替换空值null.

我使用以下代码存档大部分内容:

metaObject.unit = Arrays.stream(line
        .split(","))
        .skip(line.startsWith("@UNIT,") ? 1 : 0)
        .map(String::trim)
        .map(s -> " ".equals(s) || "".equals(s) || "_".equals(s)? null : s)
        .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

在哪里metaObject.unit定义为List<String> unit = new ArrayList<String>();

问题是Java忽略了在最后一个非空元素之后出现的空元素.我在给定的情况下得到的输出是:

[0] => a
[1] => b
[2] => c …
Run Code Online (Sandbox Code Playgroud)

java lambda java-8 java-stream

7
推荐指数
1
解决办法
379
查看次数

带模数的 Python for 循环

是否可以使用模运算创建python for循环?我在 Python 中有一个环形缓冲区,我想迭代startPosendPos索引之间的元素,其中的startPos值可以大于endPos. 在其他编程语言中,我会用模运算符直观地实现这一点:

int startPos = 6;
int endPos = 2;
int ringBufferSize = 8;
for(int i = startPos, i != endPos, i = (i+1) % ringBufferSize) {
    print buffer.getElementAt(i);
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在 Python 中轻松做到这一点?我只找到了

for i in list:
    print buffer[i]
Run Code Online (Sandbox Code Playgroud)

语法但没有为我的问题提供等效解决方案。

我的下一个方法是在迭代存储在列表中的索引之前提前创建列表。但是有没有办法像在其他编程语言中一样通过直接在 for 循环中使用模运算来做到这一点?

python for-loop modulo

3
推荐指数
1
解决办法
7332
查看次数

标签 统计

for-loop ×1

java ×1

java-8 ×1

java-stream ×1

lambda ×1

modulo ×1

python ×1