2014-03-25 79 views
8

我的目標是:以LinkedListUser s並以優雅的Java-8方式提取其用戶名的LinkedList將對象流轉換爲屬性的鏈接列表

public static void main(String[] args) { 

    LinkedList<User> users = new LinkedList<>(); 
    users.add(new User(1, "User1")); 
    users.add(new User(2, "User2")); 
    users.add(new User(3, "User3")); 

    // Vanilla Java approach 
    LinkedList<String> usernames = new LinkedList<>(); 
    for(User user : users) { 
     System.out.println(user.getUsername()); 
     usernames.add(user.getUsername()); 
    } 
    System.out.println("Usernames = " + usernames.toString()); 

    // Java 8 approach 
    users.forEach((user) -> System.out.println(user.getUsername())); 
    LinkedList<String> usernames2 = users.stream().map(User::getUsername). // Is there a way to turn this map into a LinkedList? 
    System.out.println("Usernames = " + usernames2.toString()); 
} 

static class User { 
    int id; 
    String username; 

    public User() { 
    } 

    public User(int id, String username) { 
     this.id = id; 
     this.username = username; 
    } 

    public void setUsername(String username) { 
     this.username = username; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getUsername() { 
     return username; 
    } 

    public int getId() { 
     return id; 
    } 
} 

我被困試圖將Stream對象轉換爲LinkedList。我可以把它變成一個數組(Stream::toArray()),然後把它變成ListArrays.asList(Stream::toArray())),但看起來好像......不,謝謝。

我錯過了什麼嗎?

+1

「優雅」 哦的Java 8。 –

回答

38

您可以使用一個Collector像這樣把結果爲LinkedList

LinkedList<String> usernames2 = users.stream() 
           .map(User::getUsername) 
           .collect(Collectors.toCollection(LinkedList::new));