繁体   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