查找列表java中的2个元素的数据

时间:2014-10-14 13:46:55

标签: java list arraylist

假设我在.csv文件中有一个数据如下:

         | Number | Data_1 |  Data_2  |
             1        Yes       No
             2        No        Yes
             3        Yes       Yes

我的问题是如何实现一个函数来检查Number是否包含Data 1和Data 2的数据。

到目前为止我所拥有的:

 List<Data> csvList = new ArrayList<Data>();  

String number = null;
String data_1 = null;
String data_2 = null;

if(!csvList.isEmpty() && csvList.size() > 0){
  number = csvList.get(0);
  data_1 = csvList.get(1);
  data_2 = csvList.get(2);

 //..... Now what can we do now from here? 

}

修改时间:上午10:38


解决

由于

3 个答案:

答案 0 :(得分:0)

您可以这样做:

List<Data> hasBothData = new ArrayList<Data>();  
for(Data data:csvList){
    if(data.hasData1() && hasData2()) { // how ever you check for data validity.
       hasBothData.add(data);
    }
}

您的hasBothData应该包含两个数据的所有元素。

答案 1 :(得分:0)

您应该首先逐行阅读文件。 (我假设你还没有做到这一点:你的代码中没有任何迹象。)

最简单的方法是,如果您的数据就像您提供的那样简单,那就是阅读一行,然后使用String.split(",")分割逗号,或者{{1}将分隔符设置为逗号。如果您拥有更复杂的数据,那么您可以使用CSV parser,但如果您的数据非常简单且可预测并且您不需要处理引号,那么它似乎有点过头了上。

完成上述操作后,您可以使用所读取的值,并检查它们是否应该如此(使用Scanner等)。

但如果您需要更多帮助,则需要解释更多。

答案 2 :(得分:0)

创建表示数据的对象(请注意我将名称从数据更改为CSV):

class CSV { 
    public CSV(String number, String data1, String data2){
    this.number = number;
    this.data1 = data1;
    this.data2 = data2;
    }
    String number;
    String data1;
    String data2;
    public String getNumber(){
    return this.number;
    }

    public boolean hasData(){
        if ( ( data1.equals("Yes" == true ) && (data2.equals("No" == true) )
            return true;
        return false;
    }
}

然后将数据从csv导入到它(ommited file operations):

List<Data> csvList = new ArrayList<CSV>();  

使用数字创建结果列表。     List numbers = new ArrayList();

然后迭代所有实体。

for(CSV data:csvList){
    if ( data.hasData() ) 
        numbers.add(data.getNumber());
}

如果数据不明确是或否,那么您必须知道域名,因此在编译之前必须知道所有答案,并使用解决方案。 在紧要关头,您可以将答案分组并添加方法来猜测它是什么类型的数据:

public boolean belongTo(String column) {
    if ( column.contains("Yes") == true ) 
        return true; 
    if ( column.contains("yes") == true ) 
        return true; 
    if ( column.contains("Ja") == true ) 
        return true; 
    return false;
}

您对data2执行相同的操作。 以下是如何更改Data类: 而不是

    if ( ( data1.equals("Yes" == true ) && (data2.equals("No" == true) )

把:

    if ( ( this.belongsTo(data1) == true ) && (this.belongsTo(data2) == true) )

最后我们有CSV类:

 class CSV { 
        public CSV(String number, String data1, String data2){
        this.number = number;
        this.data1 = data1;
        this.data2 = data2;
        }
        String number;
        String data1;
        String data2;
        public String getNumber(){
        return this.number;
        }

        public boolean hasData(){
            if ( ( data1.equals("Yes" == true ) && (data2.equals("No" == true) )
                return true;
            return false;
        }
public boolean belongsTo(String column) {
    if ( column.contains("Yes") == true ) 
        return true; 
    if ( column.contains("yes") == true ) 
        return true; 
    if ( column.contains("Ja") == true ) 
        return true; 
    /* insert here your "Yes" equivalents */
    return false;
}
    }