有人能告诉我如果某些条件匹配,如何从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]);
}
});
< code > if(referencing value . equals(row . get(refColIndex)))然后我将值插入到映射中,然后我需要退出。
@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()
。
你不能。从留档:
几乎在所有情况下,终端操作都是急切的,在返回之前完成它们对数据源的遍历和对管道的处理。只有终端操作iterator()和spliterator()不是;这些是作为“出口”提供的,以便在现有操作不足以完成任务的情况下,允许任意客户端控制的管道遍历。
您需要的是filter()和findFirst()或iterate()。
根据我的理解,您希望仅对列表中的一个项目执行一个语句(必需的ColValueAndName.put
)。流.forEach
的用法与此用例无关。而是查找要首先执行语句然后执行的项。
Optional<List<String>> expectedRow = dataRecs.filter(row -> referencingValue.equals(row.get(refColIndex))).findFirst();
if(expectedRow.isPresent()) {
requiredColValueAndName.put(
expectedRow.get().get(indexAndColNamePair.getKey()[1]),
indexAndColNamePair.getValue()[1]);
}
我有三张桌子: Person表以ID作为主键存储基本的Person明细此人可以拥有关系(父亲/母亲等),这些关系保存在Relationship表中,但是他们的用户是在Person表中创建的(例如Person表中的ID=2,3),这样我们就知道2,3与用户1(carry)相关。我们还有第三个表-地址,它存储用户ID方面的地址。(用户和他的相关人员,他们也是用户)我想知道在SQL中是否存在一个用户或他
问题内容: public void test(){ String x; List list=Arrays.asList(“a”,”b”,”c”,”d”); 1,像上面的代码一样,我想在foreach块旁边设置一个变量的值,行得通吗? 2.为什么呢? 3,而foreach迭代器是有序的还是无序的? 4,我认为lamdas foreach块对于迭代器来说很酷而且很简单,但这确实是一件很复杂的事情,而不
问题内容: 我可以用来匹配所有标点符号(包括下划线)。 我想严格 排除 一个单词内的所有撇号。为此,我正在使用 但是,我不能让它们一起工作以匹配所有标点符号,但严格来说单词内的撇号除外。 我应该使用什么? 例子: 这应该不匹配。 这应该匹配。 这些应该匹配。 问题答案: 您可以在此处组合三个条件。 匹配除撇号外的所有标点符号使用 匹配所有撇号,后面没有字母。 匹配所有不带字母的撇号。 正则表达式:
我试图添加if-else语句来更改文本的颜色。然而,它并不能很好地工作。我希望只把40分以下的分数改成红色,但我不知道为什么我的文字都改成了红色。我能知道我犯了什么错误吗? 在if-else语句中,我编写了当标记低于40时更改文本颜色的代码。但是,它会将所有文本更改为红色。
我正在使用Android Studio和Google Drive,这会使隐藏的系统文件可见(例如图标和桌面ini),导致错误,如本文所述。我希望指示gradle 2.14忽略它们,而不是运行脚本来删除这些文件。 为了找出如何排除文件,我在目录和中创建了名为“excludeme.txt”的文件。我尝试对项目中的两个文件进行各种修改,但没有成功排除该文件。 具体来说,我对的文件进行了以下修改: 我还将
我需要能够在如下文件中找到特定值(例如): 4D 54 68 64 00 00 00 06 00 01 00 01 00 C0 4D 54 72 6B 00 00 00 00 00 00 31 00 90 60 40 81 40 80 60 00 90 62 40 81 40 80 62 40 00 90 64 40 81 40 80 64 40 00 90 62 40 81 40 62 40 0