我想使用流到我的列表中的大写书名
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
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);
}
}
答案 0 :(得分:0)
如果您只想更新现有列表,则可以使用.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());
答案 1 :(得分:0)
您的评论阐明了您的需求:
我应该更清楚了。这段代码正在运行,但是得到 我的书名清单。我想用书代替清单 大写标题
您甚至将所需的返回类型声明为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
答案 2 :(得分:0)
已经给出了正确的答案,以便指出如果将流与方法引用功能结合使用,代码看起来会更漂亮(只是个趣味问题)。
让我举例说明:
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());
}
}