2014-05-30 3 views
2

Я новичок в Java 8 Streams. Пожалуйста, совет, как преобразовать поток Stream<HashMap<String, Object>> в массив HashMap HashMap<String, Object>[]?Как преобразовать поток Stream <HashMap <String, Object >> в HashMap Array HashMap <String, Object> []?

К примеру, у меня есть некоторый поток в коде:

Stream<String> previewImagesURLsList = fileNames.stream(); 

Stream<HashMap<String, Object>> imagesStream = previewImagesURLsList 
    .map(new Function<String, HashMap<String, Object>>() { 
     @Override 
     public HashMap<String, Object> apply(String person) { 
      HashMap<String, Object> m = new HashMap<>(); 
      m.put("dfsd", person); 
      return m; 
     } 
    }); 

Как я могу сделать что-то вроде

HashMap<String, Object>[] arr = imagesStream.toArray(); 

?

Извините, мой плохой английский.

ответ

5

Следующие должны работать. К сожалению, вы должны отключить предупреждение .

@SuppressWarnings("unchecked") 
HashMap<String, Object>[] arr = imagesStream.toArray(HashMap[]::new); 

Выражение HashMap[]::new является ссылкой конструктора массива, который является своим родом ссылки метода. Ссылки на методы обеспечивают альтернативный способ реализации функциональных интерфейсов. Вы можете также использовать лямбда-выражение:

@SuppressWarnings({"unchecked", "rawtypes"}) 
HashMap<String, Object>[] array = stream.toArray(n -> new HashMap[n]); 

Перед Java 8, вы бы использовали анонимный внутренний класс для этой цели.

@SuppressWarnings({"unchecked", "rawtypes"}) 
HashMap<String, Object>[] array = stream.toArray(new IntFunction<HashMap[]>() { 
    public HashMap[] apply(int n) { 
     return new HashMap[n]; 
    } 
}); 
+0

Удивительный! Большое спасибо ** nosid ** за мое спасенное время! –

+0

Но какие изображенияStream.toArray (HashMap [] :: new) означает? Это лямбда? Можете ли вы отправить мне полную форму изображенийStream.toArray (HashMap [] :: new), без лямбда? –

+0

Отлично! Большое спасибо! –

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