嗨,我正在两个名单中统计 这是我的代码。
public static int getMatchCount(List<String> listOne, List<String> listTwo) {
String valueOne = "";
String valueTwo = "";
int matchCount = 0;
boolean isMatchedOnce=false;
for (int i = 0; i < listOne.size(); i++) {
valueOne = listOne.get(i);
isMatchedOnce=false;
if (StringUtils.isBlank(valueOne))
continue;
for (int j = 0; j < listTwo.size(); j++) {
valueTwo = listTwo.get(j);
if (StringUtils.isBlank(valueTwo))
continue;
if (valueTwo.equals(valueOne) && (!isMatchedOnce)) {
matchCount++;
listOne.set(i, "");
listTwo.set(j, "");
isMatchedOnce=true;
}
}
}
return matchCount;
}
for ex
listone listTwo
A A
A B
B
然后结果是2而不是3
因为他们只有两个共同对,我们可以拿出来。
但是这个方法非常慢,可以快速使用Above方法进行任何改进。
答案 0 :(得分:4)
这应该是一个更容易解决的问题:
List<String> listOne = new ArrayList<String>();
//add elements
List<String> listTwo= new ArrayList<String>();
//add elements
List<String> commonList = new ArrayList<String>(listTwo);
commonList.retainAll(listOne);
int commonListSize = commonList.size();
答案 1 :(得分:2)
使用临时收集和addAll(),retainAll():
Set<String> set = new HashSet<String>();
set.addAll(list1);
set.retainAll(list2);
int count = set.size();
答案 2 :(得分:0)
也许你可以试试这个......
public static int getMatchCount(List<String> listOne, List<String> listTwo) {
String valueOne;
String valueTwo;
int matchCount = 0;
boolean isMatchedOnce;
//for (int i = 0; i < listOne.size(); i++) {
for(String i : listOne){
valueOne = i;
isMatchedOnce = false;
if (StringUtils.isBlank(valueOne)) {
continue;
}
for (String j : listTwo) {
valueTwo = j;
if (StringUtils.isBlank(valueTwo)) {
continue;
}
if (valueTwo.equals(valueOne) && (!isMatchedOnce)) {
matchCount++;
listOne.set(listOne.indexOf(i), "");
listTwo.set(listOne.indexOf(j), "");
isMatchedOnce = true;
}
}
}
return matchCount;
}