在java中从下面的类中删除lambdas

时间:2017-10-08 14:42:53

标签: java lambda java-8

我有以下使用Stream s的java类,如下所示。我有一个名为person的基本类,然后还有其他类我正在使用Stream s。

有什么方法可以避免lambdas并删除它们?

public class StreamMapDemo
{
    public static void main(String[] args)
    {
        List<Person> personList = new ArrayList<>();

        personList.add(new Person("Alice", "alice@gmail.com", Gender.FEMALE, 16));
        personList.add(new Person("Bob", "bob@gmail.com", Gender.MALE, 15));
        personList.add(new Person("Carol", "carol@gmail.com", Gender.FEMALE, 23));
        personList.add(new Person("David", "david@gmail.com", Gender.MALE, 19));
        personList.add(new Person("Eric", "eric@gmail.com", Gender.MALE, 26));

        personList.stream()                     // Stream<Person>
                  .map(p -> p.getEmail())      //  Stream<String>
                  .forEach(System.out::println);

        System.out.println("\n----------------------\n");

        personList.stream()  // Stream<Person>
                  .map(p -> p.getName().toUpperCase()) //  Stream<String>
                  .forEach(System.out::println);

        System.out.println("\n----------------------\n");

        personList.stream()  // Stream<Person>
                  .mapToInt(p -> p.getAge()) //IntStream
                  .forEach(age -> System.out.println(age));

    }

}

输出

alice@gmail.com
bob@gmail.com
carol@gmail.com
david@gmail.com
eric@gmail.com

----------------------

ALICE
BOB
CAROL
DAVID
ERIC

----------------------

16
15
23
19
26

2 个答案:

答案 0 :(得分:1)

您可以使用方法引用而不是lambda表达式:

personList.stream()                     
    .map(Person::getEmail)        
    .forEach(System.out::println);

personList.stream()
    .map(Person::getName)
    .map(String::toUpperCase)
    .forEach(System.out::println);

personList.stream()  
    .mapToInt(Person::getAge) 
    .forEach(System.out::println);

答案 1 :(得分:0)

如果您也不想使用,则此处使用常规循环的版本,例如过去

for (final Person person : personList) {
    System.out.println(person.getEmail());
}

System.out.println("\n----------------------\n");

for (final Person person : personList) {
    System.out.println(person.getName().toUpperCase());
}

System.out.println("\n----------------------\n");

for (final Person person : personList) {
    System.out.println(person.getAge());
}

或者总之,如果你想按人分组

for (final Person person : personList) {
    System.out.println(person.getEmail());
    System.out.println(person.getName().toUpperCase());
    System.out.println(person.getAge());
    System.out.println("----------------------");
}

请注意,此版本稍微更改了输出。然而它更快,你只需要一次迭代而不是三次。

然后输出如下:

alice@gmail.com
ALICE
16
----------------------
bob@gmail.com
BOB
15