我有两个字符串列表,希望比较列表中的值并构造另一个对象的新列表。我可以用嵌套循环来实现这一点,但我正在寻找一个更高效、更整洁的解决方案。
List<String> list1 = new ArrayList();
list1.add("A,Airplane");
list1.add("B,Boat");
List<String> list2 = new ArrayList();
list2.add("A90, Boing Airplane");
list2.add("A70, Boing777");
list2.add("B80, Boing Boat");
有车辆物体。
class Vehicle {
private String model;
private String submodel;
private String type;
private String subtype;
// setters getters
}
现在,我需要通过匹配模型(list1中的第一个字符)和list2中的第一个字符来构建vehicle对象
private List<Vehicle> buildVehicle(List<String> list1, List<String> list2) {
List<Vehicle> vehicles = new ArrayList<>();
if (ObjectUtils.isNotEmpty(list2)) {
list2.forEach(v -> {
Vehicle vehicle = new Vehicle();
if (v.contains(",")) {
String[] val = StringUtils.split(v,",");
vehicle.setSubtype(val[0]);
vehicle.setSubmodel(val[1]);
}
for (String c : list1) {
//Matching the first character from element in list1
if (c.substring(0,1).equals(vehicle.getSubtype().substring(0,1))
&& c.contains(",")) {
String[] val = StringUtils.split(c, ",");
vehicle.setType(val[0]);
vehicle.setModel(val[1]);
}
break;
}
}
vehicles.add(vehicle);
});
}
return vehicles;
}
使用流可以避免嵌套循环吗?
2条答案
按热度按时间f3temu5u1#
我会遵循如下方法:
ikfrs5lh2#
提供的数据。
无论如何获得模型类型信息,如果不使用
Lists
你曾经Maps
保存信息。如果信息是从文件中读入的,最好在读入时对其进行预处理(必要时进行拆分),并将其放入Map中。如果是手工输入的,那么把信息放在Map上就完全不需要任何预处理了。下面是一个简单的例子。然而,使用这里提供的信息是我如何进行的。
首先,我创建了一个lambda来帮助列表转换。
现在只需使用每一个按键通过和拼凑起来。我在我的示例中为
Vehicle
这使得imho创建了一个更干净的对象。基于tostring的打印(可以更改)。
这是类sans setters和getter。