简化比较两个数据集的逻辑

时间:2013-03-20 04:55:58

标签: java string arraylist

问题陈述: -

  1. 首先,我需要检查columns columnsListattributes(attr.getName())所有column是否存在。{/ li>
  2. 其次,如果columnsList中不存在来自attributes的任何boolean foundData,则boolean foundData应该为假。
  3. 第三,如果任何属性状态不成功,则column应为false。
  4. 第四,如果属性(attr.getName())中存在attr.getName()且状态也成功,则将计数器增加一个
  5. List<String> columnsList = getColumns(service.getColumns()); List<Attribute<?>> attributes = beClient.getAttributes(columnsList); for (String column : columnsList) { for(Attribute<?> attr : attributes) { if(!attr.getName().equals(column) || !attr.getStatus().equals("SUCCESS")) { foundData=false; break; } else if(attr.getName().equals(column) && attr.getStatus().equals("SUCCESS")) { count_success.incrementAndGet(); } } } 将返回列名称。

    以下是我的代码。我确信,我在下面的代码中搞砸了一些东西。

    {{1}}

    任何人都可以帮我吗?

    我的代码中发生了什么错误,如果它不匹配,它将使用属性检查每个列,它将在每次循环时进行。我相信哪个不对。

3 个答案:

答案 0 :(得分:1)

我会为属性创建一个Map<String,String>。然后,您可以使用Collection实用程序。例如,对于步骤1

ArrayList<String> copyOfColumns = new ArrayList<String>(columnsList );
copyOfColumns.removeAll(map.keySet());
if (copyOfColumns.size() > 0)
  // you have a column that isn't in the attribute

对于第3步来说,它是微不足道的,例如:

if (map.values().contains("FAILURE"))
  // you had a failure

我会将其他人留作练习......: - )

答案 1 :(得分:0)

为属性名称实现equals和hashcode。迭代columnList并创建一个Attribute对象。然后检查属性列表中是否存在该属性。那么你的代码就很简单了。

答案 2 :(得分:0)

检查这个重新考虑的代码是否有用......

List<String> columnsList = getColumns(service.getColumns());

List<Attribute<?>> attributes = beClient.getAttributes(columnsList);

for (String column : columnsList) {
    boolean isPresent =false;
    boolean isSuccess = true;

    for(Attribute<?> attr : attributes) {
        if(attr.getName().equals(column)){
            isPresent = true; 
        }       
        if(!attr.getStatus().equals("SUCCESS")){
            isSuccess = false; 
        }
    }

    if(!isPresent || !isSuccess){
        foundData=false; 
    }else{
        count_success.incrementAndGet();
    }   
}