关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。
上个月关门了。
改进这个问题
我正在尝试构建一个对象,它基于不同的数据类型使用不同的方法。i、 它不同于 withBooleanValue
, withStringValue
以及 withDateValue
取决于数据类型。我拥有的是一个字符串,根据该字符串是什么(布尔值、字符串或日期),我需要构建这个对象。下面是我是怎么做的。
private List<Answer> getAnswers(Set<Question> questions) {
List<Answer> answers = new ArrayList<>();
questions.forEach(question -> {
Answer.Builder answer = Answer.builder()
.withQuestion(question.question());
if (BooleanUtils.toBooleanObject(question.value()) != null) {
answer.withValue(AnswerValue.builder()
.withBooleanValue(BooleanUtils.toBoolean(question.value()))
.build());
} else {
try {
Date dateValue = DateUtils.parseDate(question.value(), new String[]{"dd-MM-YYYY"});
answer.withValue(AnswerValue.builder()
.withDateValue(dateValue)
.build());
} catch (ParseException e) {
answer.withValue(AnswerValue.builder()
.withStringValue(question.value())
.build());
}
}
answers.add(answer.build());
});
return answers;
}
在java8中有更好的方法吗?不知何故,ifs和try-catch语句使它看起来非常复杂,我想用一种更好的方法来减少行数和复杂性。任何建议都将不胜感激。
1条答案
按热度按时间xggvc2p61#
就重构代码而言,我会从以下内容开始(由于我没有所有的类,所以它不会编译,所以可能会有一些错误):
然后像这样。它还需要有一个全球性的日期,这可能是值得怀疑的。也可以传递question.value()代替传递question。