2017-10-08 16 views
-5

下面類中除去的lambda我有如下所示其使用Stream S中的下面的java類。我有一個名爲person的基本班級,然後還有其他班級,我正在使用Stream s。從在Java

有沒有辦法通過它我可以避開lambda表達式並刪除它們?

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

     personList.add(new Person("Alice", "[email protected]", Gender.FEMALE, 16)); 
     personList.add(new Person("Bob", "[email protected]", Gender.MALE, 15)); 
     personList.add(new Person("Carol", "[email protected]", Gender.FEMALE, 23)); 
     personList.add(new Person("David", "[email protected]", Gender.MALE, 19)); 
     personList.add(new Person("Eric", "[email protected]", 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)); 

    } 

} 

輸出

[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 

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

ALICE 
BOB 
CAROL 
DAVID 
ERIC 

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

16 
15 
23 
19 
26 
+4

使用常規循環轉換的代碼。 –

+1

刪除lamda或流? – azro

+3

如果您說*爲什麼要刪除lambda表達式可能會有所幫助。這裏有些人不清楚,如果你想刪除只是lambda或流。而且人們不得不想知道lambda表達式有什麼問題。 – RealSkeptic

回答

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); 
+0

我不確定OP是否也想避免**流**。但如果不是,那麼這可能確實是他正在尋找的替代方案。絕對看起來更清楚。 – Zabuza

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("----------------------"); 
} 

需要注意的是這個版本稍微改變輸出。然而它更快,你只需要一次迭代而不是三次。然後

的輸出是這樣的:

[email protected] 
ALICE 
16 
---------------------- 
[email protected] 
BOB 
15