重构此代码段

时间:2018-01-30 01:20:52

标签: java refactoring

我无法重构并使此片段更清晰,更小。 例如,我想在一行中向listOfValues添加一个新值,而不是首先将其初始化为空的arraylist,然后在单独的行上调用add,最后将listofvalues放在第三行的hasmap中。另外在else语句中是必需的hasMap.put,因为我们得到了对listOfValues的引用,如果我们向它添加一些东西,hashMap会自动包含它吗?

MyObject:
    key: String
    values: List<Value>

Value:
    Value1: String
    Value2: String


HashMap<String, MyObject> hashMap = new HashMap<>();

List<Value> listOfvalues;

if (!hashMap.containsKey(key)) {
    listOfvalues = new ArrayList<>();
    listOfvalues.add(Value.builder().withValue1(Value1).withValue2(Value2).build());
    hashMap.put(key, MyObject.builder().withkey(key).withvalues(listOfvalues).build());
} else {
    listOfvalues = hashMap.get(key).getvalues();
    log.info(String.format("Duplicate key: %s. Previous Value(s): %s", key,
            listOfvalues));
    listOfvalues.add(Value.builder().withValue1(Value1).withValue2(Value2).build());
    hashMap.put(key, MyObject.builder().withkey(key).withvalues(listOfvalues).build());
}

1 个答案:

答案 0 :(得分:2)

列表和地图工作的常见部分可以从if/else移出:

Map<String, MyObject> hashMap = new HashMap<>();

List<Value> listOfvalues;
if (!hashMap.containsKey(key)) {
    listOfvalues = new ArrayList<>();
} else {
    listOfvalues = hashMap.get(key).getvalues();
    log.info(String.format("Duplicate key: %s. Previous Value(s): %s", key,  listOfvalues));
}

listOfvalues.add(Value.builder().withValue1(Value1).withValue2(Value2).build());
hashMap.put(key, MyObject.builder().withkey(key).withvalues(listOfvalues).build());