gpt4 book ai didi

java - 比较两个数组以仅检索 JSP 中的精确匹配项,同时保留下拉列表中的显示顺序

转载 作者:行者123 更新时间:2023-12-02 09:31:08 25 4
gpt4 key购买 nike

我想将用户品牌显示为选项 Pane 中的选定元素,并且需要在下拉列表中显示完整的品牌列表。当选中条件 --> brands.contains(brand.toLowerCase().trim()) 时,将显示元素 bat、cat 和 batting,而不是仅显示 bat 和 cat。

String brands="";
String userBrands[]=new String[30];
String brandslist[]= {"bat", "cat", "ant", "batting", "antenna"};

if(user.get("brand")!=null && !user.get("brand").isEmpty()){
brands = user.get("brand").toLowerCase();
System.out.println("BRANDS: " + brands); //here bat and cat retrieved from the database //Output: BRANDS: bat, cat
userBrands = brands.split(",");
}

for(String brand:brandslist){
if(brands.contains(brand.toLowerCase().trim())){%>
<option selected="selected" value="<%=brand.trim().toLowerCase()%>"><%=brand.trim()%></option>
<%}else{%>
<option value="<%=brand.trim().toLowerCase()%>"><%=brand.trim()%></option>
<%}
}

如果我尝试使用如下所示的 2 个循环,则不会维持顺序,即选定的循环首先出现在下拉列表中,然后是未选定的循环:

if(user.get("brand")!=null && !user.get("brand").isEmpty()){
brands = user.get("brand").toLowerCase();
System.out.println("BRANDS: " + brands);
userBrands = brands.split(",");
}

for(int p=0; p<brandlist.length; p++){
brandlist[p]=brandlist[p].trim().toLowerCase();
}
for(int q=0; q<userBrands.length; q++){
userBrands[q]=userBrands[q].trim().toLowerCase();
}

List<String> masterList = new ArrayList<String>();
List<String> selectedList = new ArrayList<String>();
List<String> unSelectedList = new ArrayList<String>();

masterList = Arrays.asList(brandlist);

for(int i=0; i<userBrands.length; i++){
for(int j=0; j<brandlist.length; j++){
if(userBrands[i].trim().equalsIgnoreCase(brandlist[j].trim())){
%>
<option selected="selected" value="<%=userBrands[i].trim()%>"><%=userBrands[i].trim()%></option>
<%
}
}
}
selectedList = Arrays.asList(userBrands);

for(String ms: masterList){
unSelectedList.add(ms);
for(String s: selectedList){
if(s.equalsIgnoreCase(ms)){
unSelectedList.remove(s);
}
}
}
for(String unStr: unSelectedList){%>
<option value="<%=unStr.trim()%>"><%=unStr.trim()%></option>
<%}%>

我想要的是,只有通过 user.get("brand").toLowerCase() 来自数据库的那些可以在选项中显示为选定的(而不是任何额外的) - 就像第一个代码片段中的击球一样),并且下拉列表中品牌的显示顺序与原始数组相同-->brandslist[]。第一个代码片段可以通过一些操作来完成这项工作吗?

最佳答案

您需要使用equals方法来比较值,而不是contains。另外,在下面的代码中我添加了额外的变量found来检查通过将值与 userBrands 数组进行比较,判断 brandslist 中是否存在值,并根据该值选项 将被选择 或未选择。即:

 <%
String brands="";
String userBrands[];
String brandslist[]= {"bat", "cat", "ant", "batting", "antenna"};

if(user.get("brand")!=null && !user.get("brand").isEmpty()){
brands = user.get("brand").toLowerCase();
System.out.println("BRANDS: " + brands);
userBrands = brands.split(",");
}

//out.println(Arrays.toString(userBrands));

// to check if value there or not
boolean found;
for(int i= 0 ;i<brandslist.length ;i++){
found = false;
for(int j= 0 ;j<userBrands.length ;j++){
if(userBrands[j].equals(brandslist[i].toLowerCase().trim())){ %>
<option selected='selected' value='<%=brandslist[i].toLowerCase().trim()%>'><%=brandslist[i].trim()%></option>
<%
//value there
found = true;
}


}
//value not there found will remain false and below code will get executed
if(!found){ %>
<option value='<%=brandslist[i].trim().toLowerCase()%>'><%=brandslist[i].trim()%></option>
<%}
}%>

关于java - 比较两个数组以仅检索 JSP 中的精确匹配项,同时保留下拉列表中的显示顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57959409/

25 4 0
文章推荐: java - 在一个 SOLR 查询中获取多个字段的不同值
文章推荐: java - 如何在 Java 8 中对 List 进行排序