2016-08-10 5 views
-1

У меня есть список вроде этого. И я получаю пункты списка, как:fetch hashmap из списка в java

[ 
{Status=ok, ModuleID=40, Details=all ok, ModuleName=Job Posting, Attributes={amount=207,360.00, creatorName=Aditya, [email protected], ref=WIT0JP00000035, uom=USD, uniqueName=aditya_b, validObject=false, iconType=procurement, name=Checklist JP Cycle, refVersion=0, startDate=2015-02-01, createDate=2015-04-08, status=Pending Approval}, ID=z15040805190698260198983}, 
{Status=ok, ModuleID=70, Details=all ok, ModuleName=Time Sheet, Attributes={ref=WIT0TS00000460, uom=USD, amount=400.00, validObject=false, iconType=worker, name=Checkad1, Checkad1, refVersion=0, startDate=2015-03-30}, ID=z15040609520807147341983}, 
{Status=ok, ModuleID=430, Details=all ok, ModuleName=Expense Sheet, Attributes={ref=WIT0ES00000028, uom=USD, amount=50,000.00, validObject=false, iconType=worker, name=Checkad1, Checkad1, refVersion=0, startDate=2015-03-31}, ID=z15040609585357352848983}, 
{Status=ok, ModuleID=430, Details=all ok, ModuleName=Expense Sheet, Attributes={ref=WIT0ES00000030, uom=USD, amount=51,000.00, validObject=false, iconType=worker, name=serad1, serad1, refVersion=0, startDate=2015-04-03}, ID=z15040704105392986424983} 
] 

Теперь я хочу, чтобы пройти весь список и получить «реф» значение из раздела Атрибуты всех списков.

Как это сделать. Я написал код для этого, но как войти в раздел «Атрибуты» - это то, чего я не получаю.

List<HashMap<String,String>> rt =downloadRes.path("PAYLOAD","ModuleID"); 

       int length=rt.size(); 
       System.out.println(rt); 

       for(int i=0;i<length;i++) 
       { 



       for(HashMap<String,String> entry:(rt)) 
       { 
       for(String key:entry.keySet()) 
       { 
        if(key.equalsIgnoreCase("Attributes")) 
        { 

        //what to write over here so that I can get the value of "ref" from that hashmap being created. 


        } 

        System.out.println(entry.get(key)); 

       } 

       } 
+0

Ваш пример выглядит как JSON, только без кавычек. Если вы просто опустили их для своего примера ... и вы действительно имеете дело с данными JSON; то любая достойная библиотека JSON должна сделать это за вас. – GhostCat

+0

Если вы планируете хранить списки в HashMap с ключом ModuleID, это не сработает, потому что у вас есть дубликаты ключей. Кроме того, я не уверен, чего вы хотите достичь. – jr593

+0

@GhostCat: пожалуйста, проигнорируйте проблему JSON, подумайте, что у меня есть список, и мне нужно пройти его. Я отредактировал вопрос, пожалуйста, посмотрите. –

ответ

0

Это не рекомендуемый способ хранения данных, которые у вас есть. Вы сохраняете целое значение, «{ref = WIT ....}» в качестве строки для ключа «Атрибуты». Это будет хрупкий путь.

Но если вы хотите сохранить его как строку, вам придется проанализировать это с помощью регулярного выражения, чтобы вернуть значение или 'ref'.

Одним из возможного выражения

(?<=ref=)(.*)(?=,[ ]*uom) 

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

Вот код, чтобы проверить его ...

public static void main(String[] args){ 
     String toParse = "{ref=WIT0TS00000460, uom=USD, amount=400.00, validObject=false, iconType=worker, name=Checkad1, Checkad1, refVersion=0, startDate=2015-03-30}"; 
     Pattern p = Pattern.compile("(?<=ref=)(.*)(?=,[ ]*uom)"); 
     Matcher m = p.matcher(toParse); 
     if(m.find()){ 
     String group = m.group(1); 
     System.out.println(group); 
     } 

    } 
0
for(HashMap<String,Object> entry: rt) { 
        for(Entry<String, Object> key : entry.entrySet()) { 

           if(key.getKey().equalsIgnoreCase("Attributes")) 
            { 
             Map<String, String> attributes = (Map<String, String>) key.getValue(); 
             for(Entry<String, String> attri : attributes.entrySet()) 
             { 
             System.out.println(attri.getValue().toString()); 
             } 
            } 

           System.out.println(key.getValue()); 


         } 

        }