我正在迭代字符串列表并检查字符串是否包含冒号:
,如果确实如此,则将其拆分并将结果分配给变量。以下代码可以工作,但如何使用Java 8 lambda表达式有效地编写它。
String key = null;
String value = null;
List<String> testList = new ArrayList<>();
testList.add("value1");
testList.add("value2");
testList.add("value3");
testList.add("value4");
testList.add("value5:end");
for(String str : testList) {
if(str.contains(":" )) {
String[] pair = str.split(":");
key = pair[0];
value = pair[1];
}
}
在Java 8中尝试了相应的上述代码,但是我收到一个错误,即封闭范围内的局部变量必须是最终的或有效的最终版本。
testList.stream().forEach(str -> {
if(str.contains(":" )) {
String[] pair = str.split(":");
key = pair[0];
value = pair[1];
}
});
答案 0 :(得分:1)
也许您应该考虑这种方法:
String key = null;
String value = null;
List<String> testList = new ArrayList<>();
testList.add("value1");
testList.add("value2");
testList.add("value3");
testList.add("value4");
testList.add("value5:end");
Optional<String> optString = testList.stream().map(str -> {
if (str.contains(":")) return str;
else return null;
})
.filter(str -> str != null)
.findAny();
if(optString.isPresent()){
String []pair = optString.get().split(":");
key = pair[0];
value = pair[1];
}