Java中两个List的比较以及使用JSTL在JSP中以表格格式显示两个List之间的区别
Posted
技术标签:
【中文标题】Java中两个List的比较以及使用JSTL在JSP中以表格格式显示两个List之间的区别【英文标题】:Comparison of two List in Java and displaying the difference between two List in tabular format in JSP using JSTL 【发布时间】:2015-04-20 10:00:56 【问题描述】:我有两个 Arraylist 即-
List<java_test> one=new ArrayList<java_test>();
List<java_test> two=new ArrayList<java_test>();
我有两个方法分别返回定义的 ArrayList 值。 第一个数组列表,即 与第二个数组列表(即两个)相比,具有更多的值。
现在我想
比较两个数组列表的值并找出那里 区别
并以表格格式显示。此外,作为第一个第一个数组,一个具有更多的值与两个相比。因此,当只有一个数组的值时0 应该显示为有差异。
EDIT-1
我试图实现计算差异-
public LinkedHashMap < String, List < Double >> diff()
for (int i = 0; i < one.size() && i < two.size(); i++)
Comaprision refObj = one.get(i);
Comaprision stObj = two.get(i);
Double x = refObj.getBeam_current();
Double y = stObj.getBeam_current();
x = refObj.getBeam_energy();
y = stObj.getBeam_energy();
comparing(x, y);
x = refObj.getSt2_vs2_bag1_rb();
y = stObj.getSt2_vs2_bag1_rb();
comparing(x, y);
x = refObj.getSt2_vs2_bag2_rb();
y = stObj.getSt2_vs2_bag2_rb();
comparing(x, y);
x = refObj.getSt2_vs2_bag3_rb();
y = stObj.getSt2_vs2_bag3_rb();
comparing(x, y);
x = refObj.getSt2_vs2_bag4_rb();
y = stObj.getSt2_vs2_bag4_rb();
comparing(x, y);
dif.put("", z);
return dif;
public List < Double > comparing(Double x1, Double y1)
if ((x1 > y1))
z.add(x1 - y1);
System.out.println("value of z is" + z);
else
z.add(y1 - x1);
return z;
我收到的输出是- 但它没有给出正确的区别。我犯了什么错误?
【问题讨论】:
您在尝试完成此操作时究竟遇到了什么问题? @Takendarkk 看到我的编辑。 正如你所说的one
arraylist 有比two
更多的元素,这不会因为ArrayIndexOutOfBoundException
而失败吗?
【参考方案1】:
如果我正确理解了您的问题。如果两个数组列表都具有相同索引的值,您想要做的是打印差异,或者当只有一个数组列表具有相同索引的值时打印零。
对此有两种可能。
如果您的数组列表仅包含非零值。您可以按如下方式更改 for 循环的条件
for (int i = 0; i < one.size(); i++) // since you have already specified first array list is larger than the second.
然后改变比较函数如下:
public List < Double > comparing(Double x1, Double y1)
if(y1 == 0)
z.add(0);
else
if ((x1 > y1))
z.add(x1 - y1);
System.out.println("value of z is" + z);
else
z.add(y1 - x1);
return z;
如果您的数组列表包含零值。我建议做这样的事情
public LinkedHashMap < String, List < Double >> diff()
for (int i = 0; i < one.size(); i++)
if(i < two.size())
Comaprision refObj = one.get(i);
Comaprision stObj = two.get(i);
Double x = refObj.getBeam_current();
Double y = stObj.getBeam_current();
x = refObj.getBeam_energy();
y = stObj.getBeam_energy();
comparing(x, y);
x = refObj.getSt2_vs2_bag1_rb();
y = stObj.getSt2_vs2_bag1_rb();
comparing(x, y);
x = refObj.getSt2_vs2_bag2_rb();
y = stObj.getSt2_vs2_bag2_rb();
comparing(x, y);
x = refObj.getSt2_vs2_bag3_rb();
y = stObj.getSt2_vs2_bag3_rb();
comparing(x, y);
x = refObj.getSt2_vs2_bag4_rb();
y = stObj.getSt2_vs2_bag4_rb();
comparing(x, y);
else
for(i=0; i<(the number of variables your comparing in the if condition above); i++)
z.add(0.0);
dif.put("", z);
return dif;
public void comparing(Double x1, Double y1)
if ((x1 > y1))
z.add(x1 - y1);
System.out.println("value of z is" + z);
else
z.add(y1 - x1);
【讨论】:
您理解正确。但是 elsedif.put("",0.0); 有一个问题。 。它显示了一个异常HashMap这可能会解决这个问题。但是我还没有在使用自写类的对象上尝试过。
public static void main(String[] args)
// TODO Auto-generated method stub
List<String> list1 = new ArrayList<String>();
List<String> list2 = new ArrayList<String>();
/*Put values to both lists*/
list1.add("John");
list1.add("Doe");
list2.add("John");
list2.add("Doe");
/*Add other objects to list2. This will be the differences*/
list2.add("Jane");
list2.add("Roe");
System.out.println("Printing two lists before retaining differences");
System.out.println("list1: "+list1);
System.out.println("list2: "+list2+"\n");
System.out.println("Similarities removed. Differences stored to list2");
list2.removeAll(list1);
System.out.println("differences: "+list2);
【讨论】:
不,我的列表中有 double 类型的值。我必须从两个列表中减去值并查看差异。【参考方案3】:我不知道您进行比较的算法是否正确。例如,如果 x1 = -1 且 x2 = 5:x2 - x1 = 5 - (-1)
= 5 + 1
= 6
public static void main(String[] args)
// TODO Auto-generated method stub
List<Double> list1 = new ArrayList<Double>();
List<Double> list2 = new ArrayList<Double>();
List<Double> result = new ArrayList<Double>(); //where result will be stored
//Load with values
list1.addAll(Arrays.asList(new Double[]3.0,-5.0,7.0,-9.0,11.0,-13.0));
list2.addAll(Arrays.asList(new Double[]1.0,1.0,1.0,1.0,1.0,1.0));
System.out.println("list1: "+list1);
System.out.println("list2: "+list2);
for(int i=0; i<list1.size() && i<list2.size(); i++)
double d1 = list1.get(i);
double d2 = list2.get(i);
//If d1 is greater than d2, do d1 minus d2 otherwise do d2 minus d1
//I don't know if that is really the purpose of doing the difference in your code
//Store result to result list
result.add( d1>d2 ? d1-d2 : d2-d1);
//Print the result
System.out.println("result: "+result);
【讨论】:
我的数组列表不包含负值,并且我的列表属于我的问题中提到的对象类型。 好的。因此,请确保两个列表具有相同的大小。例如,如果第一个索引中有一个没有值的索引,则必须为其提供 0。这样可以确保两个列表的大小相同。 我的列表可以是相同大小的,我也不能提供 0,将 sql 查询的结果集添加到列表中。 好的,明白了。那么你认为结果在哪里不正确,后端还是前端?您可以在后端 Java 类上执行 System.out.println()。以上是关于Java中两个List的比较以及使用JSTL在JSP中以表格格式显示两个List之间的区别的主要内容,如果未能解决你的问题,请参考以下文章