【问题标题】:How to do this list iteration in java?如何在java中进行此列表迭代?
【发布时间】:2015-03-06 02:48:01
【问题描述】:

我有一个清单说,

"temp" : [{
              "value" : "24.6",
              "name" : "sellPrice"
            }, {
              "value" : "N",
              "name" : "IsAvail"
            }, {
              "value" : "http://my.com/prdurl/480389",
              "name" : "pd_URL"
            }

        }]

我正在遍历它以找到 IsAvail==N,

if (("IsAvail".equalsIgnoreCase(temp.get(i).getName().toString()))&& ("N".equalsIgnoreCase(temp.get(i).getValue().toString()))) {


 // Now here i want to print product url                                                                   
                    }

迭代应该继续在里面找到值??我不能改变结构。

【问题讨论】:

  • 我不明白你的列表符号。你能用java语法解释一下吗?
  • @Netto 这个“temp”将在父“item”bean 中。Temp 表示项目的属性。遍历属性我必须为另一个列表的项目设置产品 url .
  • 我试图重新格式化您的类似 JSON 的消息,但括号不匹配...您能否清楚您要做什么,因为这对我没有意义

标签: java list iteration


【解决方案1】:

通过分析您的迭代,我假设您有一种节点的 XML 属性。 一个“临时”列表,每个临时对象在其上具有这 3 个属性(sellPriceIsAvailpd_URL),并且您想要获取与 IsAvail==N 匹配的临时时间的 pd_URL

假设:

class Temp {
 Attribute[] attributes;
}
class Attribute{
 String name, value;
}

各自封装。

您可以像这样迭代Temp 的列表:

Temp[] temps = ...;
for( Temp t : temps ){
   String pd_URL="";
   boolean isAvail = false;
   for( Attribute att : t.getAttributes() ){
      if( "IsAvail".equalsIgnoreCase(att.getName()) ){
         if( "N".equalsIgnoreCase(att.getValue()) )
            isAvail==true;
         else break;
      } else if( "pd_URL".equalsIgnoreCase(att.getName()) ){
         pd_URL==att.getValue();
         if( isAvail ) break;
      }
   }
   if( isAvail ){
      System.out.println( "Temp with pd_URL: "+pd_URL+" has IsAvail == N" );
   }
}

【讨论】:

    【解决方案2】:

    鉴于您没有提供存储此信息的 Java 结构,因此很难理解您在问什么。假设该结构类似于:

    Map<String, List<KeyValuePair>> nameValuesMap;
    

    而您真正想要做的是返回具有您给出的标准的键值对的键(大假设),然后您可以这样做:

    nameValuesMap.keySet().stream()
        .filter(name -> nameValuesMap.get(name).stream()
            .filter(keyValue -> keyValue.matches("IsAvail", "N"))
            .findAny().isPresent())
        ...
    

    假设您的 KeyValuePair 类实现了 matches 谓词。

    此代码生成一个流,然后可以将其收集到一个列表中,使用 forEach 或您想做的任何其他方法进行迭代。

    【讨论】:

      猜你喜欢
      • 2014-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多