Всем доброго времени суток. Помогите, пожалуйста, я что-то запутался.
- нужно вызывать метод findFirst() объекта. Зачем? как я понимаю, мы находим максимальную цену в 1 массиве, а во втором массиве, я беру результат с первого и сравниваю его со всем 2 массивом.Так зачем мне вызывать первый элемент результата 1 функции, и очевидно, я что-то не так в сравнении делаю. Подскажите, как это сделать.
package com.javarush.task.pro.task18.task1820;
import java.util.Optional;
import java.util.stream.Stream;
import static java.util.Comparator.comparingInt;
/*
Самый дорогой автомобиль
*/
public class Solution {
public static void main(String[] args) {
var tesla = Stream.of(
new Car("Model S", 94_490),
new Car("Model 3", 50_690),
new Car("Model X", 99_690),
new Car("Model Y", 65_000)
);
var bmw = Stream.of(
new Car("X5", 110_000),
new Car("X3", 54_000),
new Car("X7", 143_000),
new Car("X6", 125_000)
);
Optional<Car> mostExpensiveCar = getMostExpensiveCar(tesla);
mostExpensiveCar.ifPresent(System.out::println);
Optional<Car> moreExpensiveCar = mostExpensiveCar.flatMap(car -> getMoreExpensiveCar(bmw, car));
moreExpensiveCar.ifPresent(System.out::println);
}
public static Optional<Car> getMostExpensiveCar(Stream<Car> cars) {
return cars.max((num1, num2) -> num1.getPrice() - num2.getPrice());
}
public static Optional<Car> getMoreExpensiveCar(Stream<Car> cars, Car mostExpensiveCar) {
//напишите тут ваш код
return cars.max((num1, num2) -> num1.getPrice() - num2.getPrice());
}
}
class Car {
private String name;
private Integer price;
public Car(String name, Integer price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public Integer getPrice() {
return price;
}
@Override
public String toString() {
return "Автомобиль " + name + ", цена - " + price + " USD";
}
}
package com.javarush.task.pro.task18.task1820;
import java.util.Optional;
import java.util.stream.Stream;
import static java.util.Comparator.comparingInt;
/*
Самый дорогой автомобиль
*/
public class Solution {
public static void main(String[] args) {
var tesla = Stream.of(
new Car("Model S", 94_490),
new Car("Model 3", 50_690),
new Car("Model X", 99_690),
new Car("Model Y", 65_000)
);
var bmw = Stream.of(
new Car("X5", 110_000),
new Car("X3", 54_000),
new Car("X7", 143_000),
new Car("X6", 125_000)
);
Optional<Car> mostExpensiveCar = getMostExpensiveCar(tesla);
mostExpensiveCar.ifPresent(System.out::println);
Optional<Car> moreExpensiveCar = mostExpensiveCar.flatMap(car -> getMoreExpensiveCar(bmw, car));
moreExpensiveCar.ifPresent(System.out::println);
}
public static Optional<Car> getMostExpensiveCar(Stream<Car> cars) {
return cars.max((num1, num2) -> num1.getPrice() - num2.getPrice());
}
public static Optional<Car> getMoreExpensiveCar(Stream<Car> cars, Car mostExpensiveCar) {
//напишите тут ваш код
return cars.max((num1, num2) -> num1.getPrice() - num2.getPrice());
}
}
class Car {
private String name;
private Integer price;
public Car(String name, Integer price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public Integer getPrice() {
return price;
}
@Override
public String toString() {
return "Автомобиль " + name + ", цена - " + price + " USD";
}
}