当前位置: 首页 > 知识库问答 >
问题:

java - JAVA代码优化?

阚英睿
2023-04-23

有没有代码写的漂亮的大佬,看看这个代码怎么优化,一直写前端的,突然被叫去搞java,发现很多技术都不太相同,例如动态的key去调用之类,导致写出这样的恶心代码,自己都看不下去了

List<String> questionCreateBySingleIdList = (List<String>) examinationCreatePojo.getQuestionCreateBySingleIdList();
List<String> questionCreateByMultipleIdList = (List<String>) examinationCreatePojo.getQuestionCreateByMultipleIdList();
List<String> questionCreateByJudgmentIdList = (List<String>) examinationCreatePojo.getQuestionCreateByJudgmentIdList();
List<String> questionCreateBySubjectiveIdList = (List<String>) examinationCreatePojo.getQuestionCreateBySubjectiveIdList();

if (questionCreateBySingleIdList.size() > 0) {
  Map map1 = questionCreateBySingleService.postBatchAdd(questionCreateBySingleIdList);
  Integer i1 = (Integer) map1.get("model");

  if (i1 == 0) {
    throw new Error("单选题题目生成错误");
  } else {
    List<QuestionCreateBySinglePojo> list1 = (List<QuestionCreateBySinglePojo>) map1.get("list");
    List<String> idList1 = new ArrayList<>();
    for (QuestionCreateBySinglePojo item1 : list1) {
      idList1.add(item1.getId());
    }
    examinationCreatePojo.setQuestionCreateBySingleIdList(idList1);
  }
}

if (questionCreateByMultipleIdList.size() > 0) {
  Map map2 = questionCreateByMultipleService.postBatchAdd(questionCreateByMultipleIdList);
  Integer i2 = (Integer) map2.get("model");

  if (i2 == 0) {
    throw new Error("多选题题目生成错误");
  } else {
    List<QuestionCreateByMultiplePojo> list2 = (List<QuestionCreateByMultiplePojo>) map2.get("list");
    List<String> idList2 = new ArrayList<>();
    for (QuestionCreateByMultiplePojo item2 : list2) {
      idList2.add(item2.getId());
    }
    examinationCreatePojo.setQuestionCreateByMultipleIdList(idList2);
  }
}

if (questionCreateByJudgmentIdList.size() > 0) {
  Map map3 = questionCreateByJudgmentService.postBatchAdd(questionCreateByJudgmentIdList);
  Integer i3 = (Integer) map3.get("model");

  if (i3 == 0) {
    throw new Error("判断题题目生成错误");
  } else {
    List<QuestionCreateByJudgmentPojo> list3 = (List<QuestionCreateByJudgmentPojo>) map3.get("list");
    List<String> idList3 = new ArrayList<>();
    for (QuestionCreateByJudgmentPojo item3 : list3) {
      idList3.add(item3.getId());
    }
    examinationCreatePojo.setQuestionCreateByJudgmentIdList(idList3);
  }
}

if (questionCreateBySubjectiveIdList.size() > 0) {
  Map map4 = questionCreateBySubjectiveService.postBatchAdd(questionCreateBySubjectiveIdList);
  Integer i4 = (Integer) map4.get("model");

  if (i4 == 0) {
    throw new Error("主观题题目生成错误");
  } else {
    List<QuestionCreateBySubjectivePojo> list4 = (List<QuestionCreateBySubjectivePojo>) map4.get("list");
    List<String> idList4 = new ArrayList<>();
    for (QuestionCreateBySubjectivePojo item4 : list4) {
      idList4.add(item4.getId());
    }
    examinationCreatePojo.setQuestionCreateBySubjectiveIdList(idList4);
  }
}

明明js可以写的这么短小优雅,java有没有办法做到这样子的呢

function getKeyName(key) {
  let v0 = key.split("questionCreateBy")[1];
  let v1 = v0.split("IdList")[0];
  return v1;
}

function main() {
  let listMap = {
    questionCreateBySingleIdList:examinationCreatePojo.questionCreateBySingleIdList,
    questionCreateByMultipleIdList:examinationCreatePojo.questionCreateByMultipleIdList,
    questionCreateByJudgmentIdList:examinationCreatePojo.questionCreateByJudgmentIdList,
    questionCreateBySubjectiveIdList:examinationCreatePojo.questionCreateBySubjectiveIdList,
  };

  let errMap = {
    'Single': '单选题题目生成错误',
    'Multiple': '多选题题目生成错误',
    'Judgment': '判断题题目生成错误',
    'Subjective': '主观题题目生成错误',
  }

  let keyName = "";

  for (const key in listMap) {
    const item = listMap[key];
    if (item.length > 0) {
      keyName = getKeyName(key);

      let map = httpMap[`questionCreateBy${keyName}Service`].postBatchAdd(item);
      let i = map.model;
      if (i === 0) {
        throw new Error(errMap[keyName]);
      } else {
        let list = map.list;
        let idList = [];

        list.map((v) => idList.push(v.id));

        examinationCreatePojo[`questionCreateBy${keyName}IdList`] = idList;
      }
    }
  }
}

共有2个答案

袁玮
2023-04-23

没按照楼上大佬用泛型改写的思路,直接用你的JS代码思路改写的

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MyClass {
    public static String getKeyName(String key) {
        String[] v0 = key.split("questionCreateBy");
        String v1 = v0[1].split("IdList")[0];
        return v1;
    }

    public static void main(String[] args) {
        Map<String, List<String>> listMap = new HashMap<>();
        listMap.put("questionCreateBySingleIdList", examinationCreatePojo.questionCreateBySingleIdList);
        listMap.put("questionCreateByMultipleIdList", examinationCreatePojo.questionCreateByMultipleIdList);
        listMap.put("questionCreateByJudgmentIdList", examinationCreatePojo.questionCreateByJudgmentIdList);
        listMap.put("questionCreateBySubjectiveIdList", examinationCreatePojo.questionCreateBySubjectiveIdList);

        Map<String, String> errMap = new HashMap<>();
        errMap.put("Single", "单选题题目生成错误");
        errMap.put("Multiple", "多选题题目生成错误");
        errMap.put("Judgment", "判断题题目生成错误");
        errMap.put("Subjective", "主观题题目生成错误");

        String keyName = "";

        for (Map.Entry<String, List<String>> entry : listMap.entrySet()) {
            String key = entry.getKey();
            List<String> item = entry.getValue();
            if (item.size() > 0) {
                keyName = getKeyName(key);

                Map<String, Object> map = httpMap.get("questionCreateBy" + keyName + "Service").postBatchAdd(item);//按照你题目写的,httpMap是哪里来的?
                int i = (int) map.get("model");
                if (i == 0) {
                    throw new Error(errMap.get(keyName));
                } else {
                    List<Map<String, Object>> list = (List<Map<String, Object>>) map.get("list");
                    List<Integer> idList = examinationCreatePojo.get("questionCreateBy" + keyName + "IdList");

                    for (Map<String, Object> v : list) {
                        idList.add((int) v.get("id"));
                    }

                    examinationCreatePojo.put("questionCreateBy" + keyName + "IdList", idList);
                }
            }
        }
    }
}
尹欣怿
2023-04-23
private List<String> postQuestionIds(List<String> idList, BaseService<?, String> service, String error) {
  List<String> result = new ArrayList<>();
  if (idList.size() > 0) {
    Map map = service.postBatchAdd(idList);
    Integer model = (Integer) map.get("model");
    if (model == 0) {
      throw new Error(error + "题目生成错误");
    } else {
      List<?> list = (List<?>) map.get("list");
      for (Object item : list) {
        result.add((String) ((Map<?, ?>) item).get("id"));
      }
    }
  }
  return result;
}
List<String> idList1 = postQuestionIds(questionCreateBySingleIdList, questionCreateBySingleService, "单选");
examinationCreatePojo.setQuestionCreateBySingleIdList(idList1);
List<String> idList2 = postQuestionIds(questionCreateByMultipleIdList, questionCreateByMultipleService, "多选");
examinationCreatePojo.setQuestionCreateByMultipleIdList(idList2);
List<String> idList3 = postQuestionIds(questionCreateByJudgmentIdList, questionCreateByJudgmentService, "判断");
examinationCreatePojo.setQuestionCreateByJudgmentIdList(idList3);
List<String> idList4 = postQuestionIds(questionCreateBySubjectiveIdList, questionCreateBySubjectiveService, "主观");
examinationCreatePojo.setQuestionCreateBySubjectiveIdList(idList4);
 类似资料:
  • 本文向大家介绍java代码效率优化方法(推荐),包括了java代码效率优化方法(推荐)的使用技巧和注意事项,需要的朋友参考一下 1、 尽量指定类的final修饰符 带有final修饰符的类是不可派生的。 如果指定一个类为final,则该类所有的方法都是final。Java编译器会寻找机会内联(inline)所有的 final方法(这和具体的编译器实现有关)。此举能够使性能平均提高50% 。 2、

  • 问题内容: 我已经编写了一个应用程序,但是由于某种原因,它一直保持在100%的峰值。我在几个类上运行了一个概要文件r,并且有报告显示isReset()和isRunning()似乎被多次调用。你有什么不对的地方请通知我。谢谢 第1类是唯一使用isReset()代码的类,因此我希望这可以帮助您检测错误 1类 2级 问题答案: 问题似乎并不在于常用的方法,而是 您调用它们的频率,这似乎就是它们出现如此

  • 35 个 Java 代码性能优化总结 代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑 的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗? 前言 代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑 的,就像大海里面的鲸鱼一

  • 在完成一个模块后,应该从那几个方面对代码进行优化,有哪些方法可以进行优化

  • 问题内容: 我想创建一个大型HashMap,但性能不够好。有任何想法吗? 欢迎其他数据结构建议,但我需要Java Map的查找功能: 就我而言,我想创建一个包含2600万个条目的地图。使用标准的Java HashMap,插入2到3百万次后,放置速度会变得异常缓慢。 另外,有人知道对密钥使用不同的哈希码分布是否有帮助? 我的哈希码方法: 我正在使用adding的关联属性来确保相等的对象具有相同的哈希

  • 问题内容: 基本上,我想做两件事: 我想知道是否可以使用Java代码运行Java代码。 如果可能的话,如何在屏幕上显示输出?(无论是常规输出还是错误或异常) 我知道这是可能的,因为我的一位前辈已经做到了,但是我不知道他是如何做到的。也许他使用了Java的内置类之一。 注意:用户将代码写入一些文本文件中,然后将文件内容存储在某个变量中,然后也许运行该代码。 问题答案: 是的,有可能。 步骤1:编译代