Java8:我们可以一个接一个地调用一个流

时间:2017-11-10 11:51:07

标签: java java-stream

我是Java8流的新手,并且正在玩它们。我正在接受Venkat Subramaniam Programming with Streams in Java 8的这次演讲,并对其进行编码。

我一次又一次打电话给.stream()两次得到以下结果: -

  1. 以大写字母表示所有18岁以上女性的姓名
  2. [SARA,SARA,PAULA]

    1. 打印所有男性
    2. basicCode.Person@c39f790

      basicCode.Person@71e7a66b

      • 我的代码中遗漏了什么?为什么我得到对象地址? 类
      • 中缺少 toString()
      • 我可以在上一个.stream()之后立即调用.stream() 是的,我们可以

      我正在做以下事情: -

      List <Person> people = createPeople(); // creating objects
      
          System.out.println("1. get, in uppercase, the names of all female older than 18");
          System.out.println( 
                  people.stream()
                  .filter(person -> person.getGender() == Gender.FEMALE)
                  .filter(person -> person.getAge() > 18)
                  .map(person -> person.getName().toUpperCase())              
                  .collect(toList())
                  );
      
                  System.out.println("2. print all males");
                  people.stream()
                  .filter(p -> p.getGender() == Gender.MALE)
                  .forEach(System.out::println);
      
      public class Person {
      private final String name;
      private final Gender gender; //is an enum {MALE, FEMALE}
      private final int age;
      }
      

2 个答案:

答案 0 :(得分:2)

另一种选择是和你的女性一样,但省略.toUpperstring()

了解如何为女性致电.getName(),但不要为男性致电。

所以

System.out.println("2. print all males");
people.stream()
    .filter(p -> p.getGender() == Gender.MALE)
    .map(p -> p.getName()) // this line was missing
    .forEach(System.out::println);

或只是

System.out.println("2. print all males");
people.stream()
    .filter(p -> p.getGender() == Gender.MALE)
    .map(Person::getName) // this is an alternative
    .forEach(System.out::println);

答案 1 :(得分:1)

您在个人班级中执行toString()实施,因此您将基本对象转换为字符串。
实施它,你就会得到你想要的东西。你的溪流都很好