代码之家  ›  专栏  ›  技术社区  ›  Rusty Shackleford

从object val等于x的自定义对象列表中收集自定义对象

  •  0
  • Rusty Shackleford  · 技术社区  · 4 年前

    假设我有以下课程:

    public class Person {
    
        private int age;
        private double height;
    
        public Person(int age, double height) {
            this.age= age;
            this.height = height;
        }
    
        public int getAge() {
            return age;
        }
    
        public double getHeight() {
            return height;
        }
    }
    

    然后考虑有这些对象的填充列表,例如。 List<Person> people .

    我的问题是,如何使用流来创建新的 List<Person>

    到目前为止,我掌握的情况如下:

    List<Person> peopleAged35 = new ArrayList<>();
    peopleAged35.add(people.stream().filter(i -> i.getAge() == 35).map(new Person).collect(Collectors.toList()));
    

    这是不编译,但我不认为我离-有人能指出我哪里出错了吗?

    2 回复  |  直到 4 年前
        1
  •  1
  •   AlBlue RACGAMERUP    4 年前

    你需要移除 .map(new Person) 从你的小溪里。

    new ArrayList 把它们加进去;这个收集器.toList将为您返回它-尽管它将是只读的。

        2
  •  1
  •   Vitaliy Moskalyuk    4 年前
    List<Person> aged35 = people.stream().filter(i -> i.getAge() == 35).collect(Collectors.toList())
    

    不知道你为什么映射到新的人。如果需要获取新对象而不是基列表中使用的引用,则可能应该克隆对象(并创建方法)个人.克隆(),例如:

    List<Person> aged35 = people.stream().filter(i -> i.getAge() == 35).map(Person::clone).collect(Collectors.toList())