如果某些条件匹配,有人可以让我知道如何退出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)))
然后我将值插入地图,然后我需要退出。
答案 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”