比较excel中的两个列表并使用java删除非重复项

时间:2016-12-21 09:58:14

标签: java excel duplicates

我的目的是比较excel中的两个列表并删除那些非重复列表。在我的代码中,我首先将第二个列表添加到第一个列表中。然后我想循环通过第一个来识别每个元素,在同一个循环中我想选择使用我识别的第一个元素再循环通过整个列表,看它是否可以找到它的任何重复,如果它找到它将其添加到新列表中。最后我想删除这两个列表并保存新列表,这样我就可以获得所有重复的数字。

 public void compareLists(){

    getOutCells1().addAll(getOutCells2());

    for(int i =0;i<getOutCells1().size();i++){

       getOutCells1().get(i);

      for( int e=0;e<getOutCells1().size();e++){

          getOutCells1().get(e);

          if(getOutCells1().get(e)==getOutCells1().get(i)){
              System.out.print(getOutCells1().get(e)+" ");
          }
      }
             }

       }

使用:

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

3 个答案:

答案 0 :(得分:0)

我不确定我是否理解你的问题,但我会尽力回答。 首先,我假设你不介意重复是否在连接它们之前在第一个列表或第二个列表中 - 你只是想在连接列表中找到重复项。 如果是这种情况,您可能希望在此处查看,因为您的实现存在许多错误: Identify duplicates in a List

如果您的目标是找到第一个列表和第二个列表中的元素,最简单的方法是:

  1. 从第一个列表中删除重复项

  2. 从第二个列表中删除重复项

  3. 连接两个列表并在连接列表中查找重复项(对于此步骤,您可以查看上面的链接)
  4. 步骤1&amp; 2您可以使用java流:

    List<Integer> list = new ArrayList<>();
    list = getOutCells1().stream()
                    .distinct()
                    .collect(Collectors.toList());
    

答案 1 :(得分:0)

我做了以下工作并且有效。

public void compareLists(){
    getOutCells1().addAll(getOutCells2());

        for(int i=0;i<getOutCells1().size();i++){

           String a=getOutCells1().get(i).toString();

            doubleCellList.add(Double.parseDouble(a));
        }

        findDuplicates(doubleCellList);

       }

public Set<Double> findDuplicates(List<Double> doubleCellList)
{
    final Set<Double> setToReturn = new HashSet();
    final Set<Double> set1 = new HashSet();

    for (Double yourInt : doubleCellList)
    {
        if (!set1.add(yourInt))
        {
            setToReturn.add(yourInt);
        }
    }

    newDoubleCellList.addAll(setToReturn);
    return setToReturn;
}

答案 2 :(得分:0)

您只能在retainAll()中使用Set

Set<String> intersection = new HashSet<>(getOutCells1());
intersection.retainAll(getOutCells2())
return union;

如果getOutCells1()是对象列表,则应使用Hashcode()和Equal()覆盖它