有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java返回带有Lambda的字符串列表项

你好到目前为止这就是我所做的

class Ideone{

    public static void main (String[] args) throws java.lang.Exception{

        Person p1 = new Person("person1");
        Person p2 = new Person("person1");
        Person [] array = new Person[]{p1, p2};

        String name_to_test = "person1";

        System.out.println(Arrays.toString(Arrays.stream(array).filter(x -> x.name.equals(name_to_test)).toArray()));

    }
}

class Person{

    public String name;

    public Person(String name){
        this.name = name;
    }

}

但我明白

[Person@1ab7765, Person@128cdfa]而我想用过滤它们的相同名称返回它们

有什么想法吗


共 (3) 个答案

  1. # 1 楼答案

    您可以使用@Override对象中的Object#toString()方法来打印它们的名称

    这将在打印阵列时显示它们的name属性

    [class]@[hash]表示法是未被重写时对象的默认Object#toString()表示法

  2. # 2 楼答案

    您没有在类中重写toString方法

    class Person{
    
        public String name;
    
        public Person(String name){
            this.name = name;
        }
    
        @Override
        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    '}';
        }
    }
    

    现在输出是:[Person{name='person1'}, Person{name='person1'}]

  3. # 3 楼答案

    您应该map()将每个经过筛选的Person转换为其相应的名称:

    Arrays.stream(array)
          .map(Person::getName)
          .filter(name_to_test::equals)
          .toArray();
    

    当然,您必须确保Person中的name有一个getter方法:

    class Person {
        public String name;
    
        public Person(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    }