使用此流,我尝试在流中重新分配变量c,以便每次映射不同的结果。我尝试在流外部使用foreach循环,但是我意识到它是徒劳的,因为它不会在流中发生。
我评论过我要做的事情。
List<Hills> hills = readHills();
Set<String> countys = new HashSet<>();
for (Hills s: hills) {
countys.add(s.getCounty());
String[] c = new String[0];
c[1] = s.getCounty();
System.out.println("### County: " + c[0]);
hills.stream()
.filter(Hill -> !Hill.getCounty().equals(c[0]))
.map((Hills Hill) -> Hill.getName() + " " + Hill.getHeight())
.forEach(Hill ->{
System.out.println(Hill);
c[0] = Hill.getCounty(); // This is what I am trying to do
});
}
答案 0 :(得分:0)
您的filter
最有可能过滤掉all results
。如果它不会那样做,那么你会在输出中看到很多java.lang.ArrayIndexOutOfBoundsException: 1
。问题出在这里:
String[] c = new String[1];
... some other code
System.out.println(Hill);
c[1] = Hill.getCounty(); // you can only access c[0] here
您正在声明一个元素的数组(通过index
零访问它);但是你试图通过index 1
访问它;哪个不存在。
即使您将代码更改为c[0] = Hill.getCounty()
;你将只存储最后一个结果,因为你使用的是forEach
(表示订单无法保证),这甚至可能不代表列表中的最后一个Hill
(具体取决于您将来可能会在以后更改parallel stream
的内容)。