java - 对方付费电话要 map 吗?

标签 java call collect

假设我们有两个 ArrayList,分别代表两个对象,并且两个对象都填充了东西。为了便于理解,一个是车牌的ArrayList,另一个是汽车的ArrayList。

所有汽车都被分配一个有效的车牌,然后汽车获得车牌号码......

cars.addAll(plates.stream().filter(plate -> plate.getStatus() == PLATE_GOOD)
  .map(plate -> new Car(plate.getNumber(), modelT())).collect(Collectors.toList()));

但是车主需要将他们的车牌和汽车登记到车牌和汽车 map 中。

registered = new HashMap<Plate, Car>();

for(Plate plate : plates)
     if(plate.getStatus() == PLATE_GOOD)
          for(Car car : cars)
              if(car.getNumber() == plate.getNumber()) {
                   registered.put(plate, car);
                   break;
              }

但 DMV 要求不得出现循环,并且车主应使用对方付费电话。

TL;DR Collect 调用具有多个谓词以填充对象映射?

最佳答案

您无法通过已使用的语句获得所需的内容,因为它会生成 Car 的列表。 ,但 Car 之间没有任何联系和 Plate 。两者都有车牌号,但这并不能让您找出 Plate如果您有Car ,反之亦然,无需经历您发布的那种双循环,或者无需设置 Map将车牌号映射到车牌或汽车。但如果您需要Map<Plate, Car> ,您不必设置 Map<String, Plate>Map<String, Car> [假设车牌号是一个字符串],尽管该 map 无论如何都是有用的。

我建议创建 Map<Plate, Car>第一:

Map<Plate, Car> carMap = plates.stream().filter(plate -> plate.getStatus() == PLATE_GOOD)
.collect(Collectors.toMap(Function.identity(), plate -> new Car(plate.getNumber(), modelT())));

这将创建一个新的 Car为每个板 block 设置 map 。 Collectors.toMap()需要两个参数,它们是在 Plate 上运行的函数。第一个将成为映射的键,第二个将成为值。 Function.identity()只是意味着我们使用 Plate本身作为 key 。或者您也可以等效地使用 plate -> plate .

要获取汽车列表,请使用carMap.values() 。这将返回 Collection (不一定是 List ),但您可以使用 addAll 将其添加到列表中。这不一定会按照与车牌相同的顺序返回汽车。如果您需要以相同的顺序排列它们,您可以在创建 carMap 后执行此操作:

List<Car> carList = plates.stream().filter(plate -> plate.getStatus() == PLATE_GOOD)
.map(plate -> carMap.get(plate)).collect(Collectors.toList()));

我不知道有什么方法可以同时执行这两项操作(将汽车添加到列表中,并将车牌/汽车添加到 map 中),除非编写自己的代码来添加到列表和 map 中:

plates.stream().filter(plate -> plate.getStatus() == PLATE_GOOD)
.forEachOrdered(plate -> { 
    Car car = new Car(plate.getNumber(), modelT()); 
    carList.add(car); 
    carMap.put(plate, car); });

forEachOrdered需要确保操作按正确的顺序执行。 注意:我还没有测试过最后一个。我认为无需同步即可工作,但我不确定。

关于java - 对方付费电话要 map 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37245094/

相关文章:

java根据变量收集流和分组

java - 从 portlet 内部访问 Liferay web 内容?

java - 带数字键的 MVEL 表达式

java - 简单java代码中的FileNotfound异常

java - Effective Java hashCode() 实现中的位移位

javascript - 如何使用 javascript/jquery 使 <a> 标签元素触发多个功能

java - 如何从 flatMap 创建 HashMap?

java - 在构建容器时,为什么使用 Java 泛型比使用对象类更好? (Java 泛型和数据结构)

php - 在 MySQL 中调用存储过程后使用 GROUP BY

java:所有线程终止后关闭连接