使用Lambda将列表项作为String返回

时间:2015-09-02 09:53:54

标签: java lambda java-8

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

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 个答案:

答案 0 :(得分:4)

您应该map()每次过滤Person到相应的名称:

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

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

class Person {
    public String name;

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

    public String getName() {
        return name;
    }
}

答案 1 :(得分:2)

您可以@Override Object#toString()Person方法中的name方法来打印其名称。

打印数组时,这将显示其[class]@[hash]属性。

Object#toString()表示法是未被覆盖时对象的默认"getent group #{mygroup}" "getent passwd #{myuser}" 表示。

答案 2 :(得分:1)

你错过了在课堂上覆盖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'}]

现在输出为:// Wait till all images are loaded before initiating the scrollr var total_images = $("body img").length; var images_loaded = 0; $(document).ready(function(e) { $("body").find('img').each(function() { var fakeSrc = $(this).attr('src'); $("<img>").attr("src", fakeSrc).load(function() { images_loaded++; if (images_loaded >= total_images) { // now all images are loaded. var s = skrollr.init(); } }); }); });