Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为嵌套循环编写java流_Java_Java Stream - Fatal编程技术网

如何为嵌套循环编写java流

如何为嵌套循环编写java流,java,java-stream,Java,Java Stream,我如何在下面的场景中使用java流和嵌套循环 package test; import java.util.ArrayList; import java.util.List; import lombok.Getter; import lombok.Setter; @Setter @Getter class Car { String carName; int wheelNo; WheelDetails wheelDetails; Car(String carName, int

我如何在下面的场景中使用java流和嵌套循环

package test;
import java.util.ArrayList;
import java.util.List;
import lombok.Getter;
import lombok.Setter;

@Setter
@Getter
class Car {
  String carName;
  int wheelNo;
  WheelDetails wheelDetails;

  Car(String carName, int wheelNo) {
    this.carName = carName;
    this.wheelNo = wheelNo;
  }
}

@Getter
@Setter
class WheelDetails {
  int wheelNo;
  String wheelColour;
  int Size;

  WheelDetails(int wheelNo, String wheelColour, int Size) {
    this.wheelNo = wheelNo;
    this.wheelColour = wheelColour;
    this.Size = Size;
  }
}

public class testMain {

  public static void main(String[] args) {

    List<Car> cars = new ArrayList<Car>();
    cars.add(new Car("CarOne", 1));
    cars.add(new Car("CarTwo", 2));

    List<WheelDetails> wheelDetailsList = new ArrayList<WheelDetails>();
    wheelDetailsList.add(new WheelDetails(1, "Black", 16));
    wheelDetailsList.add(new WheelDetails(2, "Grey", 17));
    for (Car car : cars) {
      for (WheelDetails wheelDetails : wheelDetailsList) {
        if (car.getWheelNo() == wheelDetails.getWheelNo()) {
          car.setWheelDetails(wheelDetails);
        }
      }
    }
  }
}
封装测试;
导入java.util.ArrayList;
导入java.util.List;
进口龙目吸气剂;
进口龙目织机;
@塞特
@吸气剂
班车{
丝状肉桂;
int-wheelNo;
车轮详情车轮详情;
汽车(内胎,内胎轮号){
this.carName=carName;
this.wheelNo=wheelNo;
}
}
@吸气剂
@塞特
类别详情{
int-wheelNo;
弦轮颜色;
整数大小;
车轮细节(内部车轮编号、字符串车轮颜色、内部尺寸){
this.wheelNo=wheelNo;
this.wheelColour=wheelColour;
这个。大小=大小;
}
}
公共类testMain{
公共静态void main(字符串[]args){
List cars=new ArrayList();
添加(新车(“CarOne”,1));
添加(新车(“CarTwo”,2));
List wheelDetailsList=new ArrayList();
WheelDetails列表。添加(新的WheelDetails(1,“黑色”,16));
车轮细节列表。添加(新车轮细节(2,“灰色”,17));
用于(汽车:汽车){
用于(WheelDetails WheelDetails:wheelDetailsList){
if(car.getWheelNo()==wheelDetails.getWheelNo()){
汽车.车轮设置细节(车轮细节);
}
}
}
}
}
无法在流中找到执行上述操作的选项,这将非常有帮助

已经走遍了其他地区,但找不到它。。。任何链接或解决方案都会有帮助……

尝试以下方法:

cars.forEach(car -> wheelDetailsList.stream()
    .filter(wheelDetails -> wheelDetails.wheelNo == car.wheelNo).forEach(car::setWheelDetails));

以下解决方案修改车辆列表中的元素:

cars.forEach(car->car.setWheelDetails(
wheelDetailsList.stream()
.filter(wd->car.getWheelNo()==wd.getWheelNo())
.findFirst()
.orElse(空)
));
另一个更快的解决方案基于临时映射

Map wheelMap=wheelDetails列表
.stream()
.collect(collector.toMap)(
WheelDetails::getWheelNo,//键
wd->wd,//值
(wd1,wd2)->wd1,//(可选)用于解决冲突的合并函数
LinkedHashMap::新建//保留插入顺序
));
cars.forEach(car->car.setWheelDetails(wheelMap.get(car.getWheelNo()));

上面我有两个列表cars和wheelDetails列表数组,其中包含值。。。因此,如果您想使用与插入顺序和设置
null
details相关的流在汽车对象列表(Cars)中设置wheelDetails的值,可能的改进是
Map wheelMapping=wheelDetailsList.stream().collect(Collectors.toMap(wheelDetails::getWheelNo,Function.identity()),(a,b)->b)//如果车轮编号是唯一的,则不需要)
然后
用于(Car-Car:cars){if(wheelMapping.containsKey(Car.getWheelNo()){//如果现有的wheelDetails为'null'Car,则不需要。}setWheelDetails(wheelMapping.get(Car.getWheelNo());}