簡體   English   中英

使用Streams將列表對象復制到具有修改內容的另一個列表對象

[英]copying list object to another list object with modified content using Streams

我想使用流到我的列表中的大寫書名

List<Book> list = new ArrayList<Book>();
list.add(new Book("1", "Java", 10));
list.add(new Book("2", "Spring", 20));
list.add(new Book("3", "Webservices", 30));

我要轉換我的書名的大小寫。 我當前的方法是給我List <String>而不是List <Book> --------- [JAVA,SPRING,WEBSERVICES]

    package java8;

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.stream.Collectors;
    import java.util.stream.IntStream;
    import java.util.stream.Stream;;

    public class StreamTest {

        public static void main(String s[]) {
            List<Book> list = new ArrayList<Book>();
            list.add(new Book("1", "Java", 10));
            list.add(new Book("2", "Spring", 20));
            list.add(new Book("3", "Webservices", 30));
            List<String> updateList = list.stream().map(str2 -> str2.getName().toUpperCase()).collect(Collectors.toList());            
System.out.println("--------- "+updateList);
        }
    }

如果只想更新現有列表,則可以使用.forEach()

list.forEach(b -> b.setName(b.getName().toUpperCase()));

如果要創建新列表,可以使用以下方法:

List<Book> result = list.stream()
        .map(b -> new Book(b.getId(), b.getName().toUpperCase(), b.getSomething()))
        .collect(Collectors.toList());

您的評論明確了您的需求:

我應該更清楚了。 這段代碼正在運行,但可以獲取書名列表。 我想要一個清單,而不是大寫的書名

您甚至將所需的返回類型聲明為List<Book>而不是List<String>

因此,讓我們從這里開始:

更改

List<String> updateList

List<Book> updateList

然后,要實際返回書籍列表, .map()方法中的每個迭代都必須返回該迭代的Book對象。 但是,在此之前,該操作必須在該Book上將Name成員設置為大寫。

更改 .map()

.map(str2 -> str2.getName().toUpperCase())

.map(str2 -> {str2.setName(str2.getName().toUpperCase()); return str2;})

然后,您將獲得帶有大寫標題的List<Book>

您可以在這里找到可用的版本: https : //repl.it/@randycasburn/StreamEdit

已經給出了正確的答案,以至於指出如果將流與方法引用功能結合使用,則代碼看起來會更漂亮(很有趣)。

讓我說明一下:

class Foo {

  public List<Book> convertToBooksWithTitleInUpperCase(List<Book> books) {
       return books.stream()
                   // the means: "map" book to another object (another book in this case) by calling the conversion function "createBookWithTitleInUpperCase")  
                  .map(this::createBookWithTitleInUpperCase)
                  .collect(Collectors.toList());
  } 

  private Book createBookWithTitleInUpperCase(Book book) {
     return new Book(book.getId(), book.getTitle().toUpperCase());
  }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM