有什么方法可以改善以下代码的性能吗?

时间:2020-09-08 20:53:25

标签: java

代码正在比较2个list代码。第一个list来自api调用,第二个来自数据库。我正在使用2个循环遍历列表并进行比较,并添加公共代码到新列表。第一个列表包含大约800个数据,第二个列表(来自db)包含150个数据。是否有任何方法可以改善此代码的性能。不允许在AllowedCodes Class中进行任何更改。使用嵌套循环是否会影响给定数据量下的性能?

public class AllowedCodes {

    private String codeValue="";

    public String getCodeValue() {
        return codeValue;
    }

    public void setCodeValue(String codeValue) {
        this.codeValue = codeValue;
    }
}

public class CheckCodes {

    public static void main(String[] args) {

        List<AllowedCodes> old_codes_list=getListOfOldCodes();

        List<AllowedCodes> new_codes_list=new ArrayList<>();

        String sql = "This query gets the codes from database";

        PreparedStatement statement = connection.prepareStatement(sql);

        ResultSet result = statement.executeQuery();

        while(result.next()) {

            for(AllowedCodes a:old_codes){
               if(a.getCodeValue().equalsIgnoreCase(result.getCodeValue())){
                   new_codes_list.add(a);
               }
            }

        }



    }

}

1 个答案:

答案 0 :(得分:1)

将列表复制到HashMap中,将AllowedCodes分组,小写时将它们具有相同的代码值:

Map<String, List<AllowedCodes>> map =
    old_codes.stream().collect(groupingBy(a -> a.getCodeValue().toLowerCase()));

然后,在您的while循环中:

while(result.next()) {
  String resultCodeValue = result.getCodeValue().toLowerCase();
  for (AllowedCodes a : map.getOrDefault(resultCodeValue, Collections.emptyList())) {
    new_codes_list.add(a);
  }
}