Как сохранить вывод статистического оператора в виде строки в Java? - PullRequest
1 голос
/ 11 октября 2019

У меня есть коллекция авиакомпаний следующим образом:

        Airline airline1 = new Airline("Delta", "DC", 500, new Aircraft("b777-300"));
        Airline airline2 = new Airline("American", "Baltimore", 1000, new Aircraft("a330-200"));
        Airline airline3 = new Airline("Qatar", "Doha", 300, new Aircraft("b777-300"));

        Collection<Airline> airlines= new ArrayList<>();
        airlines.add(airline1);
        airlines.add(airline2);
        airlines.add(airline3);

как я могу сохранить имена одной из этих авиакомпаний в виде строки, используя следующую агрегированную операцию (шахта, очевидно, неверна, поскольку выводит ячейку памятипри использовании System.out.println)?

String name = airlines
                    .stream()
                    .filter(a -> a.getName() == "American")
                    .toString();

Ответы [ 2 ]

1 голос
/ 11 октября 2019

Вот как вы можете выбрать одну авиакомпанию или получить строку по умолчанию, когда ее там нет:

String name = airlines                           // take the airlines
    .stream()                                    // stream them
    .filter(a -> a.getName().equals("American")) // take the one(s) with the name "American"
    .findFirst()                                 // get the first one if it's present
    .map(Object::toString)                       // use the toString method for the airline
    .orElse("Airline not found!");               // if no such airline, use this String
1 голос
/ 11 октября 2019

Попробуйте эту опцию:

String allAirlines = airlines.stream()
                             .map(a -> a.getName())
                             .collect(Collectors.joining(","));

Вместо использования filter(), который удаляет элементы из потока, вместо этого вы хотите использовать map(), который находит имя строки для каждого Airline объекта,Если вы хотите фильтровать авиалинии по имени, то вы можете попробовать:

String allAirlines = airlines.stream()
                             .filter(a -> a.startsWith("American"))
                             .map(a -> a.getName())
                             .collect(Collectors.joining(","));
...