0

我将如何将下面的代码重构为 1 个通用方法?
(背景信息,用于从与 GSON 库一起使用的 Json 字符串中获取值)

ArrayList<Map<Object, Object>> theme = new ArrayList<Map<Object, Object>>();
for (int i = 0; i < obj.getThemeList().size(); i = i + 1) {
    if(Boolean.parseBoolean(obj.getThemeList().get(i).getChecked())){
        Map<Object,Object> map = new HashMap<Object,Object>();
        map.put("id", obj.getThemeList().get(i).getId());
        map.put("name", obj.getThemeList().get(i).getName());
        theme.add(map);
    }
}

ArrayList<Map<Object, Object>> tag = new ArrayList<Map<Object, Object>>();
for (int i = 0; i < obj.getTagList().size(); i = i + 1) {
    if(Boolean.parseBoolean(obj.getTagList().get(i).getChecked())){
        Map<Object,Object> map = new HashMap<Object,Object>();
        map.put("id", obj.getTagList().get(i).getId());
        map.put("name", obj.getTagList().get(i).getName());
        tag.add(map);
    }
}
4

3 回答 3

4

基本上,只需使其成为接受getThemeList()or的单一方法getTagList(),不是吗?看来这就是他们之间的唯一区别了……

于 2012-05-29T13:45:25.383 回答
3

我认为您的意思是“我如何重构它以重用代码”,因为泛型在这里的应用不像重构那样多。

首先,阅读foreach 语法——你的 for 循环真的很难看。

你没有付出太多,但试试这个:

public interface HasIdNameAndChecked {
    String getChecked();
    String getId();
    String getName();
}

public static List<Map<String, String>> extractList(List<? extends HasIdNameAndChecked> items) {
    List<Map<String, String>> list = new ArrayList<Map<String, String>>();
    for (HasIdNameAndChecked item : items) {
        if (Boolean.parseBoolean(item.getChecked())){
            Map<String, String> map = new HashMap<String, String>();
            map.put("id", item.getId());
            map.put("name", item.getName());
            list.add(map);
        }
    }
    return list;
}

然后让你的ThemeTag类实现HasIdNameAndChecked,并像这样调用它:

List<Map<String, String>> list1 = extractThemeList(obj.getThemeList());
List<Map<String, String>> list2 = extractThemeList(obj.getTagList());

免责声明:我在没有 IDE 的情况下输入了这个,所以可能有几个错别字。

于 2012-05-29T13:48:26.783 回答
0

好吧,让我们按照以下顺序进行:

  1. 确定什么变化。主题列表和标签列表。

  2. 识别共同的属性和行为。getChecked()、getId()、getName()。

  3. 对变化进行概括。为不同的事物定义一个通用接口:抽象类、接口、行为等。

  4. 将您的解决方案更新为通用解决方案。

于 2012-05-29T13:55:17.577 回答