[英]Is there a way to compare two Strings with each other using java streams?
[英]How to parse strings using streams or other better way?
我有一个 HashMap,我想将其中的数据转换为 Response 对象。 是否可以实现下面的代码,以更好、优化和更清晰的方式解析字符串? 可能正在使用流?
class Converter{
public static void main(String[] args) {
Map<String, Long> map = new HashMap<String, Long>();
map.put("111", 80) // first
map.put("1A9-ppp", 190) // second
map.put("98U-6765", 900) // third
map.put("999-aa-local", 95) // fourth
List<FinalProduct> products = new ArrayList<>();
for(String key : map.keySet()){
FinalProduct response = new FinalProduct();
String[] str = key.split("\\-");
response.id = str[0] //id is always present in key i.e 111, 1A9, 98U,999
if(str.length == 2) {
if(str.matches("-?\\d+(\\.\\d+)?");){ // check if is numeric
response.code = str[1]; // 6765
}
else{
response.city = str[1]; //ppp
}
}
if(str.length == 3){
response.client = str[1]; //aa
response.type = str[2]; // local
}
response.qty = map.get[key];
products.add(response);
}
}
}
class FinalProduct{
String id;
String city;
Long code;
String client;
String type;
Long qty;
// getters and setters
我看不到任何重大改进。 有几点要点:
正则表达式不需要测试符号。 您已经在-
字符上进行了拆分,因此不可能在数字字段中使用减号。
考试
if(str.length == 3){
可能
else if(str.length == 3){
代码中有很多样式错误,我发现了一些编译错误。 在要求我们提供代码帮助之前,您应该已经对它们进行了纠正。
最后,流将无法完成此任务。 他们当然不会提高效率。
为了使您的代码可重用,我建议创建一个FinalProduct
构造函数作为
FinalProduct(String key, Long value) {
String[] str = key.split("-");
this.id = str[0];
if (str.length == 2) {
if (str[1].matches("-?\\d+(\\.\\d+)?")) {
this.code = Long.parseLong(str[1]);
} else {
this.city = str[1];
}
} else if (str.length == 3) { // ELSE IF !!
this.client = str[1];
this.type = str[2];
}
this.qty = value;
}
然后你可以将它用作
List<FinalProduct> products = map.entrySet().stream()
.map(e -> new FinalProduct(e.getKey(), e.getValue()))
.collect(Collectors.toList());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.