我制作了一种建造墙的方法。我正在使用流方法,起初我使用reduce
,但我试图查看forEach
是否有效。
以下是我的代码
public static void main(String[] args) {
if (args.length < 3) {
System.out.println("Need three integer arguments: width height #bricks");
System.exit(1);
}
int width = Integer.parseInt(args[0]);
int height = Integer.parseInt(args[1]);
int numberOfBricks = Integer.parseInt(args[2]);
assert numberOfBricks <= width * height: "Too many bricks";
System.out.printf("Will build a wall %d wide and %d tall%n",
width, height);
System.out.println(String.join("", Collections.nCopies(width,"==")));
final Wall wall = new Wall(width, height); //UPDATE
Wall trumpWall =
Stream.generate(() -> new Ball(10.0))
.filter(b -> b.colour == Ball.Colour.RED)
.map(Brick::new)
.limit(numberOfBricks)
.forEach(wall::lay) //UPDATE
Wall::linkTwoWalls);
System.out.println(trumpWall);
}
}
有人可以建议如何解决这个问题吗?我发现使用forEach更简单,因此更容易阅读。
答案 0 :(得分:1)
forEach
方法仅需Consumer<T>
。你只能用元素做东西,而不是返回一个值。
您在这里尝试做的只是为每个砖块调用lay(brick)
,对吗?
然后,您可以先在流方法链之外创建Wall
对象:
final Wall wall = new Wall(width, height);
然后在forEach
中,执行此操作:
.forEach(wall::lay);
执行该行之后,wall
将成为一块有很多砖块的墙。
显然,您还想将两面墙连在一起。不幸的是,我无法理解你想要连接哪两面墙。如果您再解释一下,我可以帮助您。