Это 18-й день моего участия в ноябрьском испытании обновлений. Узнайте подробности события:Вызов последнего обновления 2021 г.
🤞 Персональная домашняя страница:@青城Sequencer Stone
🤞 Преимущества вентилятора:Добавить фан-базуОтвечайте на вопросы один на один, получайте бесплатные богатые шаблоны резюме, улучшайте учебные материалы и т. д. и станьте королем новой эры!
Скоро выйдет великая Java 18, и мы, возможно, все еще не знакомы с основным использованием Lambda в Java 8. В этой статье приведены некоторые советы по использованию Map в процессе разработки технологии Stream. После прочтения этой статьи, я уверен, вы обязательно иметь новое понимание Stream.
1. Элегантно инициализируйте карту
Прежде чем смотреть вниз, подумайте, что, если бы вы неApache common
В ожидании трехстороннего пакета, как бы вы инициализировали его с начальным значениемMap
, подумав об этом, продолжайте смотреть вниз, код примерно такой, как показано в следующем коде.
final HashMap<String, String> maps = new HashMap<>();
maps.put("key1", "value1");
maps.put("key2", "value2");
Вышеупомянутый метод действительно может инициализировать карту, но самая большая проблема заключается в том, что нам может потребоваться изменить много строк наput
Пары "ключ-значение" очень повторяющиеся и многословные. Чтобы код оставался чистым и аккуратным, используйтеJava 8
Преимущество в том, что мы можем использовать что-то вроде следующего кодаstream
для инициализации.
final HashMap<String, String> maps = Stream.of(new Object[][]{{"key1", "value1"}})
.collect(Collectors.toMap(data -> (String) data[0], data -> (String) data[1]));
Одна строка кода для завершения инициализации Map, это более элегантно? если вы использовалиjooq
изTuple
, то вы найдете использованиеTuple
Он будет более элегантным и сможет делать более невероятные вещи.
2. Элегантный список на карту
В ежедневном процессе разработки, чтобы создать определенный формат данных для внешнего интерфейса, внутренние партнеры не могут избежать необходимости преобразовывать данные списка в данные карты. это? Вообще говоря, преобразование данных должно быть завершено обходом. ноJava 8
имеютStream
, мы можем сделать с ним что-то интересное.
Если у нас есть классProduct
, как показано в коде ниже.
@Getter
@Setter
@ToString
@Builder
class Product{
private Long id;
private String category;
private String name;
}
у нас есть сейчасList<Product>
форматировать данные.
static List<Product> getList(){
final List<Product> productList = new ArrayList<>(100);
for(int i =1;i<=100;i++){
productList.add(Product.builder()
.id((long) i)
.name("name"+i)
.category("category"+i%9)
.build());
}
return productList;
}
Теперь мы собираемся получитьДанные формата карты с идентификатором в качестве ключа и именем в качестве значения, код показан ниже.
Map<Long, String> map = productList.stream().collect(Collectors.toMap(Product::getId, Product::getName));
Тогда, если вы хотите получитьДанные формата карты с идентификатором в качестве ключа и продуктом в качестве значения, код показан ниже.
Map<Long, Product> map = productList.stream().collect(Collectors.toMap(Product::getId, data -> data));
Тогда, если вы хотите получитьДля данных в формате карты с категорией в качестве ключа и именем в качестве значения ключи могут конфликтовать., как это решить, вам нужно передать ключевую стратегию разрешения конфликтов, код выглядит следующим образом.
#冲突发生时,保留先存在的数据,可按照业务自定义
Map<String, String> map = productList.stream().collect(Collectors.toMap(Product::getCategory, Product::getName, (existing, replacement) -> existing));
Тогда, если вы хотите, наконец, получитьпоточно-безопасная карта, как решить, нужно пройти вSupplier<M> mapSupplier
, код показан ниже.
#这里引入的是ConcurrentHashMap,同样的也可以用TreeMap的实现
ConcurrentHashMap<String, String> map = productList.stream().collect(Collectors.toMap(Product::getCategory, Product::getName, (existing, replacement) -> existing, ConcurrentHashMap::new));
Мальчик, ты не можешь видеть достаточно? нажмите на каменьПодробное описание, Просто нажмите и посмотрите, может быть, будут сюрпризы? Добро пожаловать в поддержкуНравится/Подписывайтесь/Комментируйте, ваша поддержка — моя самая большая мотивация для Gengwen, спасибо!