Java使用Stream和Lambda表达式而不是Iterator

时间:2018-03-25 12:28:24

标签: java lambda iterator java-stream

我的计算机科学课程已经完成,我们的讲师希望我们将Stream和Lambda表达式用于迭代器。我没有看到警告,我根据自己的口味编写了所需的代码,这里是:

def cnn_model_fn2(...):
    with tf.device('/gpu:0'):
        ...

如何将其转换为Stream& Lambda代码? 非常感谢您的回答。

3 个答案:

答案 0 :(得分:1)

试试这个

List<User> tempUsers = users.stream()
    .filter(tempUser -> tempUser.getFirstName().equals(firstName))
    .collect(Collectors.toList());
//TODO do something useful with it

答案 1 :(得分:1)

您可以在一个不使用List的中间变量的语句中减少整个方法:

static List<User> getUsers(String firstName){
   return users.stream()                                        //iterate
               .filter(u -> u.getFirstName().equals(firstName)) //keep good ones
               .collect(Collectors.toList());                   //collect them in List
}
    filter方法中的
  • u是一个局部变量,它代表users列表的每个元素,你可以随意命名
  • .toCollection(ArrayList::new)将确保您拥有一个ArrayList而不是toList(),它可以在以后更改但使用它没有问题对类型,可变性,可序列化或线程安全没有任何保证列表返回;如果需要对返回的List进行更多控制,请使用doc
  • 中的toCollection(Supplier)

答案 2 :(得分:1)

您可以从用户创建一个流,然后执行class AwesomeClassProvider implements FactoryProvider{ provide: AwesomePipe; useFactory(pipe: SlicePipe) { return new AwesomePipe(pipe); } deps: [SlicePipe] } 操作以保留名称等于filter的所有用户,然后使用firstName将结果累积到{{1} }}

Collectors.toCollection