使用java8将对象的某个字段值与“_”连接起来。代码中的最后一行抛出一个“stream has eave been operated on or closed
”。
Stream<Field> fields = ...
Stream<String> exclusions = ...
Stream<String> stringStream = fields.filter(f -> exclusions.anyMatch(e -> e.equals(f.getName())))
.map(f -> {
f.setAccessible(true);
Object value = null;
try {
value = f.get(obj);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return value;
})
.filter(v -> v != null)
.map(Object::toString);
String suffix = stringStream.collect(Collectors.joining("_"));
List<Foo> list = new ArrayList<>();
list.stream().filter(item -> item != null).map(item -> {
String value = null;
return value;
}).filter(item -> item != null).map(item -> {
String value = null;
return value;
}).collect(Collectors.joining(""));
第一个筛选器
调用了多少次?不止一次,对吧?在第一次调用filter时使用的排除是通过anymatch使用的;因此,第二次尝试使用它时,会得到异常。
解决这个问题的方法是对每一个过滤操作进行流式处理:
filter(f -> sourceOfExclusions.stream().anyMatch...
方法是 现在我试着像这样改成stream,但我不知道这种改是否正确: 如何避免出现例外,解决问题? 我应该以某种方式重构代码吗?
如果我使用literal(1.0)初始化Order实例,那么这很好。当我使用doubleStream创建随机数量时,会引发异常。
问题内容: 我正在尝试使用Stream API生成Order实例。我有一个创建订单的工厂函数,并且使用DoubleStream初始化订单金额。 如果我使用文字(1.0)初始化Order实例,则可以正常工作。当我使用doubleStream创建随机数量时,将引发异常。 问题答案: 答案在(重点是我的)的javadoc中: 流仅应操作一次(调用中间流或终端流操作) 。例如,这排除了“分叉”流,其中相同
下面是我的代码: 从下面的函数调用上面的函数: 我不知道为什么。
我想复制一个Java8流,这样我可以处理它两次。我可以