【问题标题】:Finding data for 2 elements in a list java在列表java中查找2个元素的数据
【发布时间】:2014-10-14 13:46:54
【问题描述】:

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

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

我的问题是如何实现一个函数来检查一个数字是否同时具有数据 1 和数据 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


已解决

谢谢

【问题讨论】:

  • 循环遍历列表并检查值。如需完整的答案,请分享您的数据类。

标签: java list arraylist


【解决方案1】:

你可以这样做:

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 应该包含具有这两个数据的所有元素。

【讨论】:

  • 你能解释一下这里的 hasData1 和 hasData2 是什么意思吗?您是否正在创建另一个构造函数?
  • 如果您分享数据类的代码,我可以更好地向您解释。在这种情况下,它只是口头告诉你应该把你的条件放在那里。
【解决方案2】:

您应该从逐行读取文件开始。 (我假设您还没有这样做:您的代码中没有任何迹象。)

最简单的方法是,如果您的数据与您提供的一样简单,则可以在一行中读取,然后使用String.split(",") 以逗号分隔,或者使用Scanner 将分隔符设置为一个逗号。如果您有更复杂的数据,那么您可以使用CSV parser,但如果您的数据非常简单且可预测并且您不需要处理引号等,这似乎有点过头了。

完成此操作后,您可以使用读入的值,并检查它们是否正确(使用"Yes".equals(s) 等)。

但如果您需要更多帮助,则需要进行更多说明。

【讨论】:

    【解决方案3】:

    创建表示数据的对象(注意我将名称从数据更改为 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 导入到它(省略文件操作):

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

    用数字创建结果列表。 列表编号 = 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 执行相同的操作。 以下是更改数据类的方法: 而不是

        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;
    }
        }
    

    【讨论】:

    • 如果你没有在条件循环中明确地说“是”或“否”,有没有办法。如果数据不是是或否怎么办?
    • 我在答案中为此写了解决方案。
    猜你喜欢
    • 2011-01-30
    • 2016-03-22
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多