gpt4 book ai didi

java - 如何浏览 2 个列表并进行检查

转载 作者:行者123 更新时间:2023-11-30 05:34:20 24 4
gpt4 key购买 nike

我有这个列表,它将根据我在 ex 数据库中的表保存所有选定复选框的 id:数据库中的我的表部分具有以下字段 id/name/qtdPecas

List<Pecas> pecasList = new ArrayList<>();
{
if (checkMonitor.isSelected()) {
Pecas p = new Pecas();
p.setIdpecas(1);
pecasList.add(p);
}
if (checkTeclado.isSelected()) {
Pecas p = new Pecas();
p.setIdpecas(2);
pecasList.add(p);
}
if (checkMouse.isSelected()) {
Pecas p = new Pecas();
p.setIdpecas(3);
pecasList.add(p);
}
if (checkVGA.isSelected()) {
Pecas p = new Pecas();
p.setIdpecas(4);
pecasList.add(p);
}
if (checkPlacaMae.isSelected()) {
Pecas p = new Pecas();
p.setIdpecas(5);
pecasList.add(p);
}
if (checkHD.isSelected()) {
Pecas p = new Pecas();
p.setIdpecas(6);
pecasList.add(p);
}
if (checkFonte.isSelected()) {
Pecas p = new Pecas();
p.setIdpecas(7);
pecasList.add(p);
}
if (checkRam.isSelected()) {
Pecas p = new Pecas();
p.setIdpecas(8);
pecasList.add(p);
}
if (checkCabos.isSelected()) {
Pecas p = new Pecas();
p.setIdpecas(9);
pecasList.add(p);
}
if (checkGravador.isSelected()) {
Pecas p = new Pecas();
p.setIdpecas(10);
pecasList.add(p);
}
if (checkBateria.isSelected()) {
Pecas p = new Pecas();
p.setIdpecas(11);
pecasList.add(p);
}
}

我有一个 list 来检查您的数据库中是否有该商品的库存

public List<Pecas> pegarPecas() {
List<Pecas> pecaslist = new ArrayList<>();
String sql = "SELECT * FROM pecas";
try {
PreparedStatement stmt = con.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
Pecas pecas = new Pecas();
pecas.setIdpecas(rs.getInt("id_pecas"));
pecas.setNome(rs.getString("nome"));
pecas.setQtd_Pecas(rs.getInt("qtdPecas"));
pecaslist.add(pecas);
}
stmt.close();
rs.close();
} catch (SQLException ex) {
Logger.getLogger(RequisicaoDAO.class.getName()).log(Level.SEVERE, null, ex);
return null;
}

return pecaslist;
}

我想遍历这两个列表来进行检查,选取用户选择的复选框的 id 与数据库的 id 进行比较,并选取我尝试执行此操作的可用金额:

  List<Pecas> pecasList2 = new ArrayList<>();{
for (Pecas pecasVerificacao : pecasList) {
pecasVerificacao.getIdpecas();
for (Pecas pecasBanco : pecasDAO.pegarPecas()) {
if(pecasBanco.getIdpecas() == pecasVerificacao.getIdpecas()){
pecasVerificacao.setQtd_Pecas(pecasBanco.getQtd_Pecas());
pecasVerificacao.getIdpecas();
pecasList2.add(pecasVerificacao);
}
}
}
}

我不知道我是否做得最好

但是我可以获得每个选定项目所需的数据ID及数量

现在我不能做 if如果列表中每个项目的数量 > 0 调用我的方法

这一切都是为了检查数据库中的零件数量是否大于 0我没想到还有另一种方法我是java新手如果有人帮助我,我将不胜感激。

最佳答案

这不是最佳选择。

for (Pecas pecasVerificacao : pecasList) {
for (Pecas pecasBanco : pecasDAO.pegarPecas()) {
...
}
}

这将为 pecasList 中的每个元素执行一次查询。一般来说,您希望将与数据库的通信/传输的数据量保持在最低限度。多次检索所有元素是不必要的。无需太多重写的简单修复方法是仅检索一次结果并重用它们:

final List<Pecas> pecas = pecasDAO.pegarPecas();
for (Pecas pecasVerificacao : pecasList) {
for (Pecas pecasBanco : pecas) {
...
}
}

但是,这会检索到比您实际需要的更多的数据。 IN 运算符可用于仅检索您感兴趣的值。此外,您的第一个代码片段包含许多样板代码。将您的 CheckBox 存储在列表中以避免出现此问题:

private CheckBox[] checkBoxes; 

确保在创建 CheckBoxes 后执行一次以下代码。

checkBoxes = new CheckBox[] {
checkMonitor,
checkTeclado,
checkMouse,
checkVGA,
checkPlacaMae,
checkHD,
checkFonte,
checkRam,
checkCabos,
checkGravador,
checkBateria
};

(如果不能保证索引范围为1, ..., n,您可能需要使用不同的数据结构来存储数据。

这样您就可以重写填充 pecasList 的代码,如下所示(我只是在此处存储 id):

List<Integer> pecasList = new ArrayList<>();
for (int i = 0; i < checkBoxes.length; i++) {
if (checkBoxes[i].isSelected()) {
pecasList.add(i+1);
}
}
public List<Pecas> pegarPecasById(List<Integer> ids) {
if (ids.isEmpty()) {
return new ArrayList<>(0);
} else {
String sql = ids.stream().map(Object::toString).collect(Collectors.joining(",", "SELECT * FROM pecas WHERE id_pecas IN (", ")"));

try {
PreparedStatement stmt = con.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
Pecas pecas = new Pecas();
pecas.setIdpecas(rs.getInt("id_pecas"));
pecas.setNome(rs.getString("nome"));
pecas.setQtd_Pecas(rs.getInt("qtdPecas"));
pecaslist.add(pecas);
}
stmt.close();
rs.close();
} catch (SQLException ex) {
Logger.getLogger(RequisicaoDAO.class.getName()).log(Level.SEVERE, null, ex);
return null;
}

return pecaslist;
}
}

这样您就可以获得复选框的唯一结果。这应该使嵌套循环变得不必要。

关于java - 如何浏览 2 个列表并进行检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56910131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com