java - 将 For 表达式更改为 lambda Java 8
问题描述
我想将此表达式从这个 for 循环更改为使用 java 8 的 lambda 表达式,并且我想返回数组中与该值匹配的数字位置。
String[] values= {"VALUE1", "VALUE2", "VALUE3"};
int stringIndex;
for(stringIndex = 0; stringIndex < values.length; stringIndex++)
if(stringWithValue.contains(values[stringIndex])) break;
例如,
stringWithValue = "SomeOtherThingVALUE1"
应该返回0等其他值。
解决方案
可能是这样的?
老实说,我不确定它是否比您的循环更好。
import java.util.stream.*;
public class LambdaDemo {
public static void main(String[] args) {
String stringWithValue = "xxxxxxxVALUE2xxxxxxx";
String[] values= {"VALUE1", "VALUE2", "VALUE3"};
int stringIndex = IntStream
.range(0, values.length)
.filter(i -> stringWithValue.contains(values[i]))
.findFirst()
.orElseGet(() -> -1);
System.out.println(stringIndex);
}
}
推荐阅读
- c# - 每次测试都会调用 OneTimesetup,我认为 OneTimesetup 就像 BeforeSuite,TestNG 注释
- c# - ConfigureAwait(false) 维护线程身份验证,但默认情况下不
- php - 如何使用 docker-compose 通过 nginx 路由我的 php 服务器?
- julia - 使用 `Int((n+1)/2)`、`round(Int, (n+1)/2)` 或 `Int((n+1)//2)` 哪个更好?
- java - 如果 Android Studio 的 for 循环忽略嵌套
- amazon-web-services - 限制 amazon-s3 仅访问 android 应用程序
- python - 我正在更改一个变量,但是如何在函数结束时返回它的原始状态?
- swift - CrediMax:操作无法完成。(MPGSDK.GatewayError 错误 0。)
- java - 无法在 Derby 数据库中定位表
- ios - 标签栏控制器问题