private static List<Map<String, Object>> lastResult = new ArrayList<>(); static 有什么用
时间: 2023-11-11 16:57:12 浏览: 73
`private`和`static`都是Java中的访问修饰符。`private`表示该变量只能在当前类中被访问,其他类无法访问它。而`static`表示该变量属于类级别,而不是实例级别。也就是说,所有实例都共享这个变量,而不是每个实例都有自己的变量副本。
在这个例子中,`private static List<Map<String, Object>> lastResult = new ArrayList<>();`的作用是创建一个静态的、私有的、泛型为Map<String, Object>的List对象,并且初始化为空的ArrayList。这个变量可以被类中的任何静态方法访问,而且只有一个副本,可以被所有实例共享。这在需要在多个方法之间共享数据时非常有用。
相关问题
package wffz.jxmjkh.controller; import lombok.SneakyThrows; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import wffz.common.contants.ConstantProperties; import wffz.jxmjkh.service.JxMjKhTxService; import java.util.ArrayList; import java.util.List; import java.util.Map; public class SaveResultTask implements Runnable { private JxMjKhTxService jxMjKhTxService; // 上一次查询结果 private static List<Map<String, Object>> lastResult = new ArrayList<>(); private ConstantProperties constantProperties; public SaveResultTask(JxMjKhTxService jxMjKhTxService) { this.jxMjKhTxService = jxMjKhTxService; run(); } @SneakyThrows @Override public void run() { //查询表中的数据并保存在lastResult lastResult = jxMjKhTxService.getLastData(constantProperties.getJsbh()); // 获取当前接口查询结果 List<Map<String, Object>> result = jxMjKhTxService.selectJxMjkhTxData(constantProperties.getJsbh()); // 待插入的数据 List<Map<String, Object>> toBeInserted = new ArrayList<>(); // 待更新的数据 List<Map<String, Object>> toBeUpdated = new ArrayList<>(); // 待删除的数据 List<Map<String, Object>> toBeDeleted = new ArrayList<>(); // 遍历上一次查询结果,看看是否需要更新或删除 for (Map<String, Object> last : lastResult) { boolean found = false; for (Map<String, Object> current : result) { if (StringUtils.equals((CharSequence) current.get("jsbh"), (CharSequence) last.get("jsbh")) && StringUtils.equals((CharSequence) current.get("txxId"), (CharSequence) last.get("txxId")) && StringUtils.equals((CharSequence) current.get("sm"), (CharSequence) last.get("sm"))) { found = true; break; } } if (!found) { toBeDeleted.add(last); } } // 遍历当前查询结果,看看是否需要插入或更新 for (Map<String, Object> current : result) { boolean found = false; for (Map<String, Object> last : lastResult) { if (StringUtils.equals((CharSequence) current.get("jsbh"), (CharSequence) last.get("jsbh")) && StringUtils.equals((CharSequence) current.get("txxId"), (CharSequence) last.get("txxId")) && StringUtils.equals((CharSequence) current.get("sm"), (CharSequence) last.get("sm"))) { found = true; break; } } if (found) { toBeUpdated.add(current); } else { toBeInserted.add(current); } } // 批量插入 if (!toBeInserted.isEmpty()) { jxMjKhTxService.batchInsert(toBeInserted); } // 批量更新 if (!toBeUpdated.isEmpty()) { jxMjKhTxService.batchUpdate(toBeUpdated); } // 批量删除 if (!toBeDeleted.isEmpty()) { jxMjKhTxService.batchDelete(toBeDeleted); } // 保存本次查询结果 lastResult = result; } }代码不运行
这是一个保存查询结果的任务类,其中使用了Spring框架的@Autowired注解来注入依赖的JxMjKhTxService服务。任务主要是根据查询结果来进行数据的插入、更新和删除操作,以保持数据库中的数据与查询结果的一致性。其中,待插入、更新和删除的数据保存在相应的列表中,最后通过JxMjKhTxService的批量操作方法来实现对数据库的批量插入、更新和删除。
// 遍历当前查询结果,看看是否需要插入或更新 for (Map<String, Object> current : result) { boolean found = false; for (Map<String, Object> last : lastResult) { if (current.equals(last)) { found = true; break; } } if (found) { toBeUpdated.add(current); } else { toBeInserted.add(current); } }
这段代码的作用是将当前查询结果与上一次查询结果进行比较,找出需要插入和更新的数据。具体来说,它首先定义了两个空的 List,即 toBeUpdated 和 toBeInserted,用于存储需要更新和插入的数据。然后通过 for 循环遍历当前查询结果 result 中的每一个元素 current,并在内部再次通过 for 循环遍历上一次查询结果 last 中的每一个元素,比较两个元素是否相等。如果找到了相等的元素,说明当前元素需要更新,将其添加到 toBeUpdated 中;如果没有找到相等的元素,说明当前元素需要插入,将其添加到 toBeInserted 中。最后,整个函数返回两个 List,分别代表需要插入和更新的数据。
阅读全文