I would use Streams for that job:
Option 1:
List<Rectangle> rectangles = Stream.of(new Rectangle(10, 10, Color.RED),
new Rectangle(20, 20, Color.GREEN),
new Rectangle(30, 30, Color.YELLOW),
new Rectangle(40, 40, Color.BLUE),
new Rectangle(50, 50, Color.PURPLE))
.flatMap(rectangle ->
IntStream.range(0, 4).mapToObj(i -> {
var newRectangle = new Rectangle(rectangle.getWidth(), rectangle.getHeight(), rectangle.getFill());
newRectangle.getTransforms().add(new Rotate(90 * i, 500, 500));
return newRectangle;
}))
.collect(Collectors.toList());
Option 2:
Given that your rectangles are squares (height == width), you can also do:
Map<Integer, Color> map = Map.of(10, Color.RED, 20, Color.GREEN, 30, Color.YELLOW, 40, Color.BLUE, 50, Color.PURPLE);
List<Rectangle> rectangles = map.entrySet().stream()
.flatMap(entry -> IntStream.range(0, 4).mapToObj(i -> {
Rectangle rectangle = new Rectangle(entry.getKey(), entry.getKey(), entry.getValue());
rectangle.getTransforms().add(new Rotate(90 * i, 500, 500));
return rectangle;
}))
.collect(Collectors.toList());
Update
Option 1:
To maintain the order you need to use Comparator and invert the streams.
List<Rectangle> rectangles = IntStream.range(0, 4).boxed()
.flatMap(i ->
Stream.of(new Rectangle(10, 10, Color.RED),
new Rectangle(20, 20, Color.GREEN),
new Rectangle(30, 30, Color.YELLOW),
new Rectangle(40, 40, Color.BLUE),
new Rectangle(50, 50, Color.PURPLE))
.sorted(Comparator.comparingDouble(Rectangle::getWidth))
.map(rectangle -> {
var newRectangle = new Rectangle(rectangle.getWidth(), rectangle.getHeight(), rectangle.getFill());
newRectangle.getTransforms().add(new Rotate(90 * i, 500, 500));
return newRectangle;
}))
.collect(Collectors.toList());
Option 2:
To maintain the order you need to use a TreeMap and invert the streams.
Map<Integer, Color> map = Map.of(10, Color.RED, 20, Color.GREEN, 30, Color.YELLOW, 40, Color.BLUE, 50, Color.PURPLE);
Map<Integer, Color> treeMap = new TreeMap<>(map);
List<Rectangle> rectangles = IntStream.range(0, 4).boxed()
.flatMap(i ->
treeMap.entrySet().stream().map(entry -> {
Rectangle rectangle = new Rectangle(entry.getKey(), entry.getKey(), entry.getValue());
rectangle.getTransforms().add(new Rotate(90 * i, 500, 500));
return rectangle;
}))
.collect(Collectors.toList());