Java - 映射流变量重新分配

时间:2017-04-17 16:36:17

标签: java java-8 mapping java-stream

使用此流,我尝试在流中重新分配变量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
                        });
             }

1 个答案:

答案 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的内容)。