Java如何从字符串列表中查找配送负载最低的司机对应条目
实现配送负载最低司机识别
当前存储的司机信息格式为姓名, 所在位置, 配送负载,示例数据:
Wesley Smith, London, 4 Mark Hammond, London, 2 Abul Ali, London, 12 Ned Cayhill, London, 6
现有代码存在的问题
- 泛型声明不匹配:
deliveries列表指定泛型为Integer,初始化时却写了new ArrayList<String>(),编译会报错 - 语法缺失:
int intLoad = Integer.parseInt(load)行末尾缺少分号 - 逻辑偏差:单独把负载值抽离到独立列表后,负载和原始司机条目失去绑定关系;且当前调用
Collections.max取的是最大负载值,和找最低负载的需求不符
最简实现方式
不需要单独维护负载列表,单次遍历原司机列表时,同步维护「当前遇到的最小负载值」和「对应司机条目」两个变量即可,直接拿到目标结果:
import java.util.ArrayList; public class DriverLoadMatcher { public static void main(String[] args) { ArrayList<String> matchedDrivers = new ArrayList<>(); matchedDrivers.add("Wesley Smith, London, 4"); matchedDrivers.add("Mark Hammond, London, 2"); matchedDrivers.add("Abul Ali, London, 12"); matchedDrivers.add("Ned Cayhill, London, 6"); int minLoad = Integer.MAX_VALUE; // 最终要的最低负载司机条目就存在这个变量里 String targetDriver = null; for (String entry : matchedDrivers) { // 截取最后一个逗号后的内容,去掉首尾空格避免转整数失败 int currentLoad = Integer.parseInt( entry.substring(entry.lastIndexOf(",") + 1).trim() ); if (currentLoad < minLoad) { minLoad = currentLoad; targetDriver = entry; } } // 测试输出,结果为 Mark Hammond, London, 2 System.out.println(targetDriver); } }
如果后续需要频繁处理司机信息,建议单独定义
Driver类,将姓名、位置、配送负载声明为类属性,避免反复做字符串截取操作,代码可维护性更高。
内容的提问来源于stack exchange,提问作者CoderInNeed
相关产品推荐
相关产品推荐

