[英]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.