Есть ли способ создать коллекцию объектов из другого в Java (подобно LINQ)?

Совершенно новый вопрос: как в Java получить свойства из одного набора объектов в другой?

В C# я обычно использую отличный синтаксис LINQ для такого рода задач. Вот пример:

        List<Hero> Heroes = new List<Hero>()
        {
            new Hero() { Name = "Iron Man", Superpower = "Being Iron Man, duh", Age = 48 },
            new Hero() { Name = "Spider-Man", Superpower = "Spidey things", Age = 16 }

        };

        List<AlterEgo> AlterEgos = Heroes.Select(x => new AlterEgo { Age = x.Age }).ToList();

После .Select я получаю два AlterEgo с Ages 48 и 16. Есть ли способ сделать это в Java?

heroes.stream().map(x -> new AlterEgo(x.getAge())).collect(Collectors.toList())
shmosel 30.05.2019 01:56

Это потрясающе, спасибо! Кроме того, в качестве продолжения: можно ли это сделать с анонимным объектом, чтобы получить набор некоторых свойств? В C# это: `Heroes.Select(x => new { x.Age, x.Name }).ToList();, который внутри становится List<'a>.

Mariano Luis Villa 30.05.2019 02:07

В Java на самом деле нет анонимных объектов. Но в Java 10+ вы можете сделать что-то вроде этого: var list = heroes.stream().map(x -> new Object() { int age = x.getAge(); String name = x.getName(); }).collect(Collectors.toList());

shmosel 30.05.2019 02:19

Круто, это действительно полезно. Не могли бы вы опубликовать свой комментарий в качестве ответа, чтобы я мог его принять?

Mariano Luis Villa 30.05.2019 03:02
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
177
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Потоки — это Java-параллель LINQ. Вот что хотел бы ваш код на Java с адаптацией стиля и синтаксиса:

List<Hero> heroes = Arrays.asList(
        new Hero("Iron Man", "Being Iron Man, duh", 48),
        new Hero("Spider-Man", "Spidey things", 16)
);

List<AlterEgo> alterEgos = heroes.stream()
        .map(x -> new AlterEgo(x.getAge()))
        .collect(Collectors.toList());

Что касается продолжения в комментариях, в Java нет надлежащих анонимных объектов, но вы можете создавать экземпляры анонимные классы и получать доступ к их свойствам, если вы можете избежать именования типа. В Java 10 это немного упрощается с помощью ключевого слова var:

var list = heroes.stream()
        .map(x -> new Object() {
            int age = x.getAge();
            String name = x.getName(); 
        })
        .collect(Collectors.toList());

list.forEach(x -> System.out.println(x.age));

Другие вопросы по теме