Поскольку вы объединяете 3 разных свойства объекта, вам нужно использовать 3 разных StringBuilder
экземпляра (или StringJoiner
). Вы можете повторить список объектов 3 раза, по одному для каждого свойства, или, если вы хотите повторить список только один раз (несмотря на то, что обход списка чрезвычайно дешев), вы можете использовать либо свой собственный подход, либо традиционный foreach.
Или вы также можете использовать код, который я показываю ниже, который семантически эквивалентен другим ответам, за исключением того, что он позволяет отделить процесс конкатенации от итерации (если вам это вообще нужно):
StringBuilder xBuilder = new StringBuilder(); // no need to use final since
StringBuilder yBuilder = new StringBuilder(); // these instances are
StringBuilder zBuilder = new StringBuilder(); // effectively final
Consumer<SomeObject> action = ((Consumer<SomeObject>) obj ->
xBuilder.append(obj.getX() + ","))
.andThen(obj -> yBuilder.append(obj.getY() + ","))
.andThen(obj -> zBuilder.append(obj.getA().getZ() + ","));
Затем вы можете передать action
(т. Е. Некоторому методу, который не имеет видимости над строителями) и просто сделать:
someObjects.forEach(action);