Java列表映射功能不起作用

时间:2016-07-01 11:15:45

标签: java arraylist java-stream

myList
.stream()
.map((question) -> {                    
     question.setQuestionId(UUID.randomUUID().toString());
     return question;
});

以下java代码没有进入map函数。有人可以指点我在这里做的根本错误吗? myList是一个包含一些元素的ArrayList。

2 个答案:

答案 0 :(得分:3)

如果查看java.util.stream.Stream.map的文档,您会看到此方法返回一个新流。如果您需要保留原始列表,请使用此方法并将结果存储在新列表中:

List<...> newList = myList
                     .stream()
                     .map(question -> {                    
                       question.setQuestionId(UUID.randomUUID().toString());
                       return question;
                     })
                     .collect(Collectors.toList());

如果您只需要修改原始列表,由于List实施Iterable,您可以使用java.lang.Iterable.forEach

myList.forEach(question -> question.setQuestionId(UUID.randomUUID().toString()));

答案 1 :(得分:2)

Java中的Streams是 lazy 。这意味着在请求结果之前不会执行任何转换,例如map。请求整个流结果的常用方法是使用某些终端操作,例如forEachcollect。没有终端操作就不会执行任何操作。