我正在尝试用 Function Java 重写以下代码。 str 是一个管道 |和 equal = 分隔字符串,其中包含 FieldName1=FieldValue1|FieldName2=FieldValue2|... 依此类推... 此代码查找字段名称的第一次出现,并查找由 = 符号分割的相应值。有什么办法可以继续使用Functional Java吗?
示例输入 str=债券=US922646AS37|Isin=US922646AS37|Cusip=922646AS3|价格=100.5|货币=美元|持仓=2000000|.......|债券=US69318FAJ75|Isin=US69318FAJ75|Cusip=69318FAJ7|价格=102.5|货币=美元|持仓=1000000|.....
字段名称=价格
startIdx=100
输出:102.5
String process(String fieldName, int startIdx, String str) {
do {
int start = str.indexOf(fieldName, startIdx);
if (start == -1) {
return null;
}
if ( start > 0 && str.charAt(start-1) != '|' ) {
startIdx = start+1;
continue;
}
int val = str.indexOf("=", start);
if ( val == -1 ) {
return null;
}
if (val - fieldName.length() != start) {
int end = str.indexOf("|", startIdx);
if (end == -1) {
return null;
}
start = end + 1;
continue;
}
int end = str.indexOf("|", val);
if (end == -1) {
return str.substring(val + 1);
} else {
return str.substring(val + 1, end);
}
} while (true);
}
这是一种方法。
String s = "FieldName1=FieldValue1|FieldName2=FieldValue2|FieldName3=FieldValue3";
Map<String, String> map = Arrays.stream(s.split("\\|")).map(str -> str
.split("=")).collect(Collectors.toMap(arr -> arr[0], arr-> arr[1]));
map.forEach((k,v)->System.out.printf("%s -> %s%n", k, v));
打印
FieldName3 -> FieldValue3
FieldName2 -> FieldValue2
FieldName1 -> FieldValue1