如何从我的代码中删除重复

hud*_*udi 11 java refactoring

我有两种类似的方法.其中一个打印出来的东西,其中一个可以节省一些东西.正如您所看到的,有很多重复的代码.我应该如何重构它并删除这个重复?

public static void printSomething(List<String> list) {
    for (String item : list) {
        if (item.contains("aaa")) {
            System.out.println("aaa" + item);
        }
        if (item.contains("bbb")) {
            System.out.println("bbb" + item);
        } else {
            System.out.println(item);
        }
    }
}

public static Map<String, String> getSomething(List<String> list) {
    Map<String, String> map = new HashMap<String, String>();
    for (String item : list) {
        if (item.contains("aaa")) {
            map.put("aaa", item);
        }
        if (item.contains("bbb")) {
            map.put("bbb", item);
        } else {
            //do nothing
        }
    }
    return map;
}
Run Code Online (Sandbox Code Playgroud)

更新:

当方法不完全相似时,代码已更新以解决问题

teh*_*exx 7

假设printlnof "aaa"和of的顺序"bbb"无关紧要,可以替换printSomethingwith 的实现

public static void printSomething(List<String> list) {
  Map<String, String> map = getSomething(list);
  for(Map.Entry<String, String> entry : map) {
    System.out.println(entry.getKey() + entry.getValue());
  }
}
Run Code Online (Sandbox Code Playgroud)


Tia*_*ida 3

具有方法action(T t) 的通用接口操作可以减少代码。

public interface Action<E> {
        void action(E e);
}
Run Code Online (Sandbox Code Playgroud)

例子:

public static void forEach(List<String> list, Action <String> action) {
    for(String s : list){
           action.action(s);

}
Run Code Online (Sandbox Code Playgroud)

现在您只需要 2 个不同的 Action 实现。

如果您不想创建类,可以使用匿名类型。

如果您了解 C#,这与 lambda 类似。

编辑:

使用匿名类型:

public static Map<String, String> getSomething(List<String> list) {
    final Map<String, String> map = new HashMap<String, String>();
    forEach(list, new Action<String>() {
        @Override
        public void action(String e) {
            if (e.contains("aaa")) {
                map.put("aaa", e);
            }
            if (e.contains("bbb")) {
                map.put("bbb", e);
            } else {
                // do nothing
            }
        }
    });
    return map;
}
Run Code Online (Sandbox Code Playgroud)

创建类:

public static Map<String, String> getSomething2(List<String> list) {
    final Map<String, String> map = new HashMap<String, String>();
    forEach(list, new ListToMapAction(map));
    return map;
}


public class ListToMapAction implements Action<String> {

    Map<String, String> map;

    public ListToMapAction(Map<String, String> map) {
        this.map = map;
    }

    @Override
    public void action(String e) {
        if (e.contains("aaa")) {
            map.put("aaa", e);
        }
        if (e.contains("bbb")) {
            map.put("bbb", e);
        } else {
            // do nothing
        }
    }

}
Run Code Online (Sandbox Code Playgroud)