[英]In Java streams, convert comma separated list of string into a List, but remove a substring at front of each string if present
[英]Splitting comma separated list using Java Collections and Streams
我正在使用 String 初始化一些数据,如下所示:
private String foods = "burgers:10,apples:20,soda:25"
...作为单个字符串传递到此方法中,如下所示:
public Map<String, String> getFoods() {
return getCommaSeperatedFoodsMap(foods);
}
...调用此方法将数据拆分为相应的键/值:
public Map<String, String> getCommaSeperatedFoodsMap(String foods) {
if (foods.isEmpty()) {
return Maps.newHashMap();
}
Map<String, String> allFoods = Arrays.stream(foods.split(","))
.map(s -> s.split(":"))
.collect(Collectors.toMap(s -> s[0].trim(), s -> s[1].trim()));
logger.info("Foods are:" + allFoods);
return allFoods;
}
然后我可以使用它来迭代每个 map 条目并将拆分字符串作为单独的参数传递给另一个方法:
public void createFoods() {
vehicle.getFoods().forEach(this::createFoodData);
}
public void createFoodData(String foodType, String price) {
//....use data in this method
我的问题是,我希望能够传递一个 String 并在每个,
分隔符上拆分 4 个值,如下所示:
private String foods = "1:burgers:10:new,2:apples:20:old,3:soda:25:new"
...因此我需要拆分 4 :
分隔值并将它们作为 String 参数像以前一样传递给createFoodData(String number, String foodType, String price, String age)
然后将采用 4 个参数,例如
iteration 1: '1', 'burgers', '10', 'new'
iteration 2: '2', 'apples', '20', 'old'
etc...
我应该使用哪个 Collection / interface 来实现这个? 我已经离开 Java 一段时间了,需要一些提示。
应创建包含四个字段的 class FoodData
(例如,使用 Lombok 的@Data
和@AllArgsConstructor
注释):
@Data
@AllArgsConstructor
class FoodData {
private String
number,
foodType,
price,
age;
public FoodData(String ... arr) {
this(arr[0], arr[1], arr[2], arr[3]);
}
}
然后可以重构方法getFoods()
以立即返回FoodData
列表,而无需迭代 map 并调用createFoodData
:
public List<FoodData> getFoodData(String foods) {
return Arrays.stream(foods.split("\\s*,\\s*")) // Stream<String>
.map(row -> row.split(":")) // Stream<String[]>
.map(FoodData::new) // Stream<FoodData>
.collect(Collectors.toList());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.