Заполните сложный боб из CSV - PullRequest
1 голос
/ 04 марта 2011

Я работаю над расчетным проектом с большим количеством научных знаний в конкретных областях. Таким образом, наш клиент предоставил нам CSV-файлы, заполненные входами и выходами. Мы можем написать модульные тесты, аккуратно скопировав все эти данные в настройки и утверждения, но мы хотели бы избежать этого, поскольку это просто грубая работа, и пропустить один десятичный знак может сделать наши тесты недействительными.

Я сделал быстрый прототип, который берет простой CSV-файл и настраивает его в объект ввода и вывода с помощью Common.BeanUtils.populate (работает как сон) и некоторого парсинга. Мой файл выглядит так:

Inputs | AtomicNumber | AtomicWeight | IsIsotope | RateOfDecay |
       | ###          | ###          | 1         | 0           |

Output | WillItBlend  |
       | 1            |

И это сработало до сих пор. Моя проблема в том, что я пришел к классу с коллекциями и файлом, который выглядит следующим образом:

Inputs | MoleculeId | StateAtRoomTemp | IsPosionous | IsShiny |
       | ###        | L               | 1           | 1       |

Inputs | AtomicNumber | AtomicWeight | IsIsotope | RateOfDecay |
       | ###          | ###          | 1         | 0           |
       | ###          | ###          | 1         | 0           |
       | ###          | ###          | 1         | 0           |

Output | WillItBlend  |
       | 1            |

где каждая молекула имеет ряд элементов. Какие существуют элегантные решения (если они есть), позволяющие легко создать боб молекулы со списком элементов?

Ответы [ 2 ]

0 голосов
/ 04 марта 2011

Я нашел возможное, но не идеальное решение.Я мог бы изменить формат с:

Inputs | AtomicNumber | AtomicWeight | IsIsotope | RateOfDecay |
       | ###          | ###          | 1         | 0           |
       | ###          | ###          | 1         | 0           |
       | ###          | ###          | 1         | 0           |

на:

*Elements | AtomicNumber | AtomicWeight | IsIsotope | RateOfDecay |
          | ###          | ###          | 1         | 0           |
          | ###          | ###          | 1         | 0           |
          | ###          | ###          | 1         | 0           |

Когда я нажимаю это *, я использую PopulateUtils с именем свойства, которое следует, чтобы получить тип.Затем я создаю новый bean-компонент этого типа, заполняю его, как я заполнил обычные входные данные, а затем помещаю этот новый объект или коллекцию объектов в ранее созданный bean-компонент.Я не горжусь этим решением, поэтому я не приму его, пока не станет ясно, что оно не станет лучше.

0 голосов
/ 04 марта 2011

Я не работал с Apache BeanUtils, так что я просто догадываюсь ... Но я знаю, что если сгенерированные JAXB JavaBeans должны использовать список, они создают поле List (или свойство в терминологии bean) с нет установщика, но с получателем, который создает экземпляр поля, если оно пустое. Как это:

private List<?> elements;
public getElements() {
    if(elements == null)
        elements = new ArrayList<?>();
    return elements;
}

Еще раз, не уверен, если это вообще поможет.

PS: это должен был быть комментарий, а не ответ, но я изменил его, потому что комментарий не позволял фрагменты кода.

...