Как вернуть карту из отдельного канала CSV в Java 8 - PullRequest
0 голосов
/ 19 сентября 2018
public Map<Long, String> getReports()
{
    // 123434|str1,123434|str2,123434|str3
    HashMap<Long, String> map = new HashMap<Long, String>();
    List<String> items =  Arrays.asList( reports.split( "," ) );
    for( String i : items )
    {
        String parts[] = i.split( "|" );
        map.put( Long.parseLong( parts[0] ), parts[1] );
    }
    return map;
}

Хотите знать, как бы я переписал это с использованием потоков Java8?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

@ Squiggs: Карта - не позволяет дублировать ключи.пожалуйста, посмотрите также на приведенный ниже код.Я подумал, что это может также помочь вам или дать вам немного больше информации.Я изменил строку входного источника на 1234345|str1,1234346|str2,1234347|str3 и обновил ее дополнительными строками, особенно sysout, чтобы распечатать значения памяти.

String source = "1234345|str1,1234346|str2,1234347|str3";

    return Arrays.stream(source.split(","))
            .map(s -> s.split("\\|"))
            .collect(  Collectors.toMap ( s -> { System.out.println(" 1: "+Long.valueOf ( s[0]));  return Long.valueOf ( s[0]);} ,
                                          s -> { System.out.println(" 2: "+s[1]);return s[1]; },
                                          ( (v1, v2) -> {   System.out.println("------ line 131 : "+v1 +"  "+v2); return v2 ;}  )
                                        )
                     );

с указанным выше источником, который вы получите в виде: {1234346=str2, 1234347=str3, 1234345=str1}

Если я изменю источник на source = "123434|str1,123434|str2,123434|str3", я получу вывод как {123434=str3}

0 голосов
/ 19 сентября 2018

Вам необходимо передать потоковый массив, используйте map, чтобы манипулировать им и в конце собрать его на карту:

return Arrays.stream(reports.split( "," ))
             .map(s-> s.split("|"))
             .collect(Collectors.toMap(p-> Long.parseLong(p[0]), p-> p[1]));
...