Вы можете просто использовать
MessageFormat.format(property.getString("key.print.names"),String.join(",",names),schoolName);
EDIT: как добавить и перед фамилией:
String listOfNames = String.join(" and ",
Arrays.asList(
String.join(",", names.subList(0, names.size() - 1)),
names.get(names.size() - 1)
)
);
MessageFormat.format(property.getString("key.print.names"),listOfNames,schoolName);
EDIT: как предлагается в комментарии, если вы хотите своего рода локализацию вы можете использовать свойство для соединения, и фрагмент станет следующим:
String listOfNames = String.join(new StringBuilder(" ")
.append(property.getString("key.conjunction.en"))
.append(" ").toString(),
Arrays.asList(
String.join(",", names.subList(0, names.size() - 1)),
names.get(names.size() - 1)
)
);
MessageFormat.format(property.getString("key.print.names"),listOfNames,schoolName);
В более сложном сценарии (веб-приложение) вы можете использовать ResourceBoundle
, подробнее здесь и здесь