Здравствуйте, HAXT, Вы писали:
HAX>Коллеги, подскажите пожалуйста способы, которыми можно уменьшить когнитивную сложность метода, средствами Java 8 HAX>Хотелось бы какое то элегантное решение, может быть предикатами или лямбдами переделать. Есть какие идеи ?
Здравствуйте, HAXT, Вы писали:
HAX>Коллеги, подскажите пожалуйста способы, которыми можно уменьшить когнитивную сложность метода, средствами Java 8 HAX>Хотелось бы какое то элегантное решение, может быть предикатами или лямбдами переделать. Есть какие идеи ?
public interface ConverterContext {
Object nullSafe(Long long);
Object nullSafe(Date date);
...
}
public interface Column {
Object valueFrom(IndexedDraftOrderDto data, ConverterContext context);
}
public enum ExportColumnEnum implements Column {
ORDER_CODE {
public Object valueFrom(IndexedDraftOrderDto data, ConverterContext context){
return context.nullSafe(data.getOrderCode());
}
},
SAVED {
public Object valueFrom(IndexedDraftOrderDto data, ConverterContext context){
return context.nullSafe(data.getSaved());
}
}, .... // other columns
}
public class ExportOrderRequestDto {
private List<ExportColumnEnum> columns;
}
public interface OutBuilder {
OutBuilder append(Object value);
OutBuilder endRow();
}
private void fillCvsColumnsValues(List<? extends Column> columns,
ConverterContext context
OutBuilder builder,
PageDto<IndexedDraftOrderDto> orders) {
for (final IndexedDraftOrderDto o : orders.getContent()) {
for (final Column column: columns){
builder.append(column.valueFrom(o, context));
}
builder.endRow();
}
}
Здравствуйте, HAXT, Вы писали:
HAX>Коллеги, подскажите пожалуйста способы, которыми можно уменьшить когнитивную сложность метода, средствами Java 8 HAX>Хотелось бы какое то элегантное решение, может быть предикатами или лямбдами переделать. Есть какие идеи ?
Оставляя за скобками красоту кода (тут уже много насоветовали), меня больше смущает вот это:
for (IndexedDraftOrderDto o : searchOrders.getContent()) {
if (request.getColumns().contains(ExportColumnEnum.ORDER_CODE)) {
csvBuilder.addNextColumnValue(o.getOrderCode());
}