相关疑难解决方法(0)

尽早终止Iterable.forEach

我有一套和一个方法:

private static Set<String> set = ...;
public static String method(){
    final String returnVal[] = new String[1];
    set.forEach((String str) -> {
        returnVal[0] += str;
        //if something: goto mark
    });
    //mark
    return returnVal[0];
}
Run Code Online (Sandbox Code Playgroud)

我可以在lambda中终止forEach(使用或不使用例外)吗?我应该使用匿名课吗?

我能做到这一点:

set.forEach((String str) -> {
     if(someConditions()){
         returnVal[0] += str;
     }
});
Run Code Online (Sandbox Code Playgroud)

但是浪费时间.

使用stream.reduce实现

return set.parallelStream().reduce((output, next) -> {
    return someConditions() ? next : output;
}).get(); //should avoid empty set before
Run Code Online (Sandbox Code Playgroud)

我正在寻找最快的解决方案,因此如果它们足够快,那么每个循环的异常和"真实"是可以接受的.

java lambda iterable java-8

2
推荐指数
1
解决办法
487
查看次数

如何在不阻塞使用流的情况下处理队列的所有元素?

假设我有一个Queue<String>,我想清空队列的当前内容并对每个元素做一些事情。使用循环我可以做类似的事情:

while (true) {
    String element = queue.poll();
    if (element == null) {
        return;
    }
    System.out.println(element);
}
Run Code Online (Sandbox Code Playgroud)

这感觉有点丑。我可以用流做得更好吗?

请注意,可能有其他线程同时访问队列,因此依赖队列的大小来知道要轮询的项目数量很容易出错。

java queue java-stream

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

Java 8+流中是否有等同功能?

我正在尝试根据条件过滤列表。是否有其他替代方法可以中断Java 8流以停止过滤?

举个例子:假设我有以下列表。

List<String> list = Arrays.asList("Foo","Food" ,"Fine","Far","Bar","Ford","Flower","Fire");

list.stream()
        .filter(str -> str.startsWith("F")) //break when str doesn't start with F
        .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

我希望从头开始以“ F”开头的所有字符串,一旦找到不以“ F”开头的字符串,我想停止过滤。没有流,我将执行以下操作:

List<String> result = new ArrayList<>();
for(String s : list){
    if(s.startsWith("F")){
        result.add(s);
    }
    else{
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

如何在信息流中使用“中断”?

java lambda break java-8 java-stream

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

如何在 Java Stream API 中重写`while(true)`

这个Java代码可以用Stream API重写吗?

while (true) {
    ...
    if (isTrue()) break;
}

private boolean isTrue() {
    ...
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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

标签 统计

java ×4

java-8 ×3

java-stream ×3

lambda ×2

break ×1

iterable ×1

queue ×1