gpt4 book ai didi

elasticsearch - ElasticSearch/Painless:如何在迭代时跳过项目?

转载 作者:行者123 更新时间:2023-12-03 01:44:21 28 4
gpt4 key购买 nike

我有一个循环的 list 。如果列表中包含某个值,例如“5”,则我希望循环跳过该值。但是,Painless似乎决心通过不允许我留空if块或使用continue语句来不允许这样做。 我该怎么做?

"script_fields": {
"HResultCount": {
"script": {
"lang": "painless",
"inline": "int instance = 0; for (int i = 0; i < doc['numbers'].length; ++i) { if (doc['numbers'] == '5') { /* bail out */ } else { return 1.0; } }"
}
}

最佳答案

由于脚本在所有情况下都必须返回值,因此您可以按照建议在进行迭代之前从列表中删除值5。

您可以通过使用Java 8 lambda在列表的副本上调用removeIf来实现此目的:

"script_fields": {
"HResultCount": {
"script": {
"lang": "painless",
"inline": "int instance = 0; List copy = new ArrayList(doc['numbers']); copy.removeIf(i -> i == 5); for (int i = 0; i < copy.length; ++i) { instance += copy[i]; } return instance;"
}
}

关于elasticsearch - ElasticSearch/Painless:如何在迭代时跳过项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45203116/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com