2015-01-08 3 views
1

У меня есть список сказать,Как сделать этот список итераций в java?

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

итерации должны продолжаться внутри, чтобы найти значение ?? Я не могу изменить структуру.

+0

Я не понимаю ваш список. Не могли бы вы объяснить это в синтаксисе java? – Netto

+0

@Netto Этот «temp» будет внутри родительского компонента «item». Temp представляет атрибуты элемента. Итерируя через атрибуты, я должен установить URL-адрес продукта для элемента другого списка. – coderman

+1

Я попытался переформатировать ваше JSON-подобное сообщение, но скобки не совпадают ... можете ли вы понять, что вы пытаетесь сделать, потому что для меня это не имеет смысла –

ответ

0

Проанализировав вашу итерацию, я бы предположил, что у вас есть своего рода XML-атрибуты узлов. Список o 'temp', на котором каждый временный объект имеет эти 3 атрибута (sellPrice, IsAvail и pd_URL), и вы хотите получить pd_URL темпов, которые соответствуют IsAvail==N.

Позволяет supose:

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"); 
    } 
} 
0

Это довольно трудно понять, что вы просите дано не поставлять структуру 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 или что-то еще, что вы хотите сделать.

Смежные вопросы