Почему после фильтрации в стриме выводится пустое поле
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Test2 {
public static void main(String[] args) {
Vehicle vh1 = new Vehicle("Audi A7",'g',300,2012,5.4);
Vehicle vh2 = new Vehicle("MB CLS",'g',545,2016,5.2);
Vehicle vh3 = new Vehicle("Tesla",'e',345,2018,4.5);
Vehicle vh4 = new Vehicle("VW Golf",'g',245,2021,6.4);
Vehicle vh5 = new Vehicle("LR Range Rover",'d',339,2019,6.9);
List<Vehicle> vehicles = new ArrayList<>();
vehicles.add(vh1);
vehicles.add(vh2);
vehicles.add(vh3);
vehicles.add(vh4);
vehicles.add(vh5);
vehicles = vehicles.stream().filter(element -> element.getTypeEngine()>290&&element.getZeroToOneHundred()<6).collect(Collectors.toList());
System.out.println(vehicles);
}
}
class Vehicle{
private String model;
private char typeEngine;
private int horsePower;
private int releaseYear;
private double zeroToOneHundred;
public Vehicle(String model, char typeEngine, int horsePower, int releaseYear, double zeroToOneHundred) {
this.model = model;
this.typeEngine = typeEngine;
this.horsePower = horsePower;
this.releaseYear = releaseYear;
this.zeroToOneHundred = zeroToOneHundred;
}
@Override
public String toString() {
return "Vehicle{" +
"model='" + model + '\'' +
", typeEngine=" + typeEngine +
", horsePower=" + horsePower +
", releaseYear=" + releaseYear +
", zeroToOneHundred=" + zeroToOneHundred +
'}';
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public char getTypeEngine() {
return typeEngine;
}
public void setTypeEngine(char typeEngine) {
this.typeEngine = typeEngine;
}
public int getHorsePower() {
return horsePower;
}
public void setHorsePower(int horsePower) {
this.horsePower = horsePower;
}
public int getReleaseYear() {
return releaseYear;
}
public void setReleaseYear(int releaseYear) {
this.releaseYear = releaseYear;
}
public double getZeroToOneHundred() {
return zeroToOneHundred;
}
public void setZeroToOneHundred(double zeroToOneHundred) {
this.zeroToOneHundred = zeroToOneHundred;
}
}
после запуска выводится "[]", но должно выводить ауди и теслу. можете подсказать в каком направлении думать? я никак не разгляжу, что я упустил
Ответы (1 шт):
Автор решения: had0uken
→ Ссылка
У вас ни один объект не подходит по критерию getTypeEngine()>290. У вас элементы:
g=103
e=101
d=100
ЛЮБОЙ из них меньше 290 из вашего Predicate в методе фильтр, соответственно они все отрабрсываются и до проверки getZeroToOneHundred дело даже не доходит. Вероятно вы имели ввиду лошадиные силы вместо типа двигателя?
public class Test2 {
public static void main(String[] args) {
Vehicle vh1 = new Vehicle("Audi A7",'g',300,2012,5.4);
Vehicle vh2 = new Vehicle("MB CLS",'g',545,2016,5.2);
Vehicle vh3 = new Vehicle("Tesla",'e',345,2018,4.5);
Vehicle vh4 = new Vehicle("VW Golf",'g',245,2021,6.4);
Vehicle vh5 = new Vehicle("LR Range Rover",'d',339,2019,6.9);
List<Vehicle> vehicles = new ArrayList<>();
vehicles.add(vh1);
vehicles.add(vh2);
vehicles.add(vh3);
vehicles.add(vh4);
vehicles.add(vh5);
vehicles = vehicles.stream().filter(element -> element.getHorsePower()>290&&element.getZeroToOneHundred()<6).collect(Collectors.toList());
System.out.println(vehicles);
}
}
Выход:
[Vehicle{model='Audi A7', typeEngine=g, horsePower=300, releaseYear=2012, zeroToOneHundred=5.4}, Vehicle{model='MB CLS', typeEngine=g, horsePower=545, releaseYear=2016, zeroToOneHundred=5.2}, Vehicle{model='Tesla', typeEngine=e, horsePower=345, releaseYear=2018, zeroToOneHundred=4.5}]
Process finished with exit code 0