如果某些条件在java 8中匹配,如何从forEach退出

时间:2016-01-15 05:35:02

标签: java foreach java-stream

如果某些条件匹配,有人可以让我知道如何退出forEach循环。我正在使用并行流。

以下是我的代码。

Map<int[], String[]> indexAndColNamePairs = depMapEntry.getKey();
Set<List<String>> dataRecords = depMapEntry.getValue();

for(Map.Entry<int[], String[]> indexAndColNamePair: indexAndColNamePairs.entrySet())
{
    int refColIndex = indexAndColNamePair.getKey()[0];
    Stream<List<String>> dataRecs = dataRecords.parallelStream();
    dataRecs.forEach((row) -> {
        if(referencingValue.equals(row.get(refColIndex)))
        {
            requiredColValueAndName.put(row.get(indexAndColNamePair.getKey()[1]),
                indexAndColNamePair.getValue()[1]);
        }
}); 

if(referencingValue.equals(row.get(refColIndex)))然后我将值插入地图,然后我需要退出。

4 个答案:

答案 0 :(得分:3)

不能。来自documentation

  

在几乎所有情况下,终端操作都很渴望,在返回之前完成数据源的遍历和管道的处理。只有终端操作iterator()和spliterator()不是;这些是作为“逃生舱口”提供的,以便在现有操作不足以完成任务时启用任意客户端控制的管道遍历。

您想要的是filter()findFirst()iterate()

答案 1 :(得分:2)

据我了解您的要求,您只想对列表中的一个项目执行一个语句(requiredColValueAndName.put)。 Stream.forEach的使用与此用例无关。而是先找到要为其执行语句的项目,然后执行。

Optional<List<String>> expectedRow = dataRecs
    .findFirst(row -> referencingValue.equals(row.get(refColIndex))));

if(expectedRow.isPresent()) {
    requiredColValueAndName.put(expectedRow.get().get(indexAndColNamePair.getKey()[1]),
                                indexAndColNamePair.getValue()[1]);
}

答案 2 :(得分:2)

@MrinalKSamanta的更多功能变化回答:

indexAndColNamePairs.forEach((indices, colNames) -> {
    int refColIndex = indices[0];
    dataRecords.parallelStream()
               .filter(row -> referencingValue.equals(row.get(refColIndex)))
               .findFirst()
               .ifPresent(row ->
                   requiredColValueAndName.put(row.get(indices[1]), colNames[1]));
});

请注意,如果您不限制精确放置第一个匹配值(或者您最多只能获得一个匹配值),那么将.findFirst()替换为.findAny()可能会有更好的效果。

答案 3 :(得分:0)

private String checkforlogin(List<String[]> ld, String iname, String ipass) {

    for (String[] u : ld) {
        Log.e("u[1]" ,u[1]);
        Log.e("u[2]" ,u[2]);

        if(u[1].toString().equals(iname) && u[2].toString().equals(ipass)){
            System.out.println("Bingo!!!" + u[0] + " " + u[1] + " " + u[2]);
            //go the the MainActivity
            retur_val = u[0];
        }else{
            if(retur_val.equals("-1"))
            {
                retur_val = "-1";
            }else {
                Log.e("already" , "got the value");
            }

//返回retur_val;

        }
    }
    return retur_val;
}

// ++++++++++++++++++++++++++++++++++++++++++++ retur_val是calss变量,它是“ -1”