Intereting Posts
Странное поведение GeoPoint и / или android.maps.Projection при панорамировании MapView при максимальном уровне масштабирования Выполнение покупок в приложении с учетной записью Google Play отличается от основной учетной записи устройства Кордова, получив Ошибка при добавлении платформы Android на Ubuntu 14.04 Как создать временную метку Unix на Android? Установка цветов по умолчанию для Android-библиотеки Компиляция с помощью NDK дает ошибку для успешно включенных файлов заголовков Студия Android: отладка приложения на устройстве Проблема с кнопкой «Назад» в VideoView Android: добавьте дату / время для выхода gradle apk filename Не удалось запустить таймер в службе в android Синтаксическая ошибка на токене variabledeclatoratorid ожидается после этого токена ProGuard для Android и GSON Ошибка прошивки android progard GetActivity (). FindViewById (R.layout.contacts_list_view) возвращает null Обнаружение последней строки списка прокрутки – Android

Преобразование HashMap в разделяемую строку

У меня есть класс ShoppingCartHelper и метод.

 private static Map<Product, ShoppingCartEntry> cartMap = new HashMap<Product, ShoppingCartEntry>(); 

И метод, который хранит продукт данных в cartMap:

 public static List<Product> getCartList() { List<Product> cartList = new Vector<Product>(cartMap.keySet().size()); for(Product p : cartMap.keySet()) { cartList.add(p); } return cartList; } 

В другом классе я вызываю сохраненные данные на карте:

 private List<Product> mCartList; mCartList = ShoppingCartHelper.getCartList(); 

И распечатать его в запятой:

 StringBuilder commaSepValueBuilder = new StringBuilder(); for ( int i = 0; i< mCartList.size(); i++) { commaSepValueBuilder.append(mCartList.get(i)); if ( i != mCartList.size()-1) { commaSepValueBuilder.append(", "); } } System.out.println(commaSepValueBuilder.toString()); 

Его напечатано как com.android.test@34566f3,com.android.test@29f9042

Как распечатать данные на карте в строке (для чтения человеком)?

Сделайте класс Product переопределив метод toString() или в вашей пользовательской логике, создайте строковый построитель, не добавляющий сам элемент, а его файлы, которые вы хотите получить в качестве текстового описания экземпляра продукта. Я имею в виду что-то вроде этого:

 //since I don't know, what is the Product class, I supposed it has a name filed commaSepValueBuilder.append(mCartList.get(i).getName()); 

Не используйте Vector , используйте ArrayList . Цитирование javadoc:

Если потоковая реализация не нужна, рекомендуется использовать ArrayList вместо Vector

Более короткая версия getCartList() :

 public static List<Product> getCartList() { return new ArrayList<>(cartMap.keySet()); } 

Что касается того, как создавать список продуктов, разделенных запятыми, лучший способ – реализовать метод Product toString() . Это также поможет при отладке.

 public class Product { // lots of code here @Override public String toString() { return getName(); // Assuming Product has such a method } } 

Затем вы можете использовать StringBuilder в простой for-each цикла:

 StringBuilder buf = new StringBuilder(); for (Product product : ShoppingCartHelper.getCartList()) { if (buf.length() != 0) buf.append(", "); buf.append(product); // or product.getName() if you didn't implement toString() } System.out.println(buf.toString()); 

В Java 8, который можно упростить, используя StringJoiner :

 StringJoiner sj = new StringJoiner(", "); for (Product product : ShoppingCartHelper.getCartList()) sj.add(product); System.out.println(sj.toString()); 

Вы можете переопределить метод toString в своем классе Product, как показано ниже,

 public class Product { //sample properties private String name; private Long id; public String getName() { return name; } public void setName(String name) { this.name = name; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } @Override public String toString() { return "Product{" + "name='" + name + '\'' + ", id=" + id + '}'; } 

}

Он может печатать строку в удобочитаемом формате.

Переопределите toString в классе Product и используйте потоки Java 8, чтобы сделать его более простым, как показано ниже:

  mCartList.stream().map(e -> e.toString()) .collect(Collectors.joining(",")); 

Применение:

 List<Product> mCartList = new ArrayList<>(); mCartList.add(new Product(1, "A")); mCartList.add(new Product(2, "B")); String commaSepValue = mCartList.stream().map(e -> e.toString()) .collect(Collectors.joining(",")); System.out.println(commaSepValue); 

Product.java

 final class Product { private final int id; private final String name; public Product(int id, String name) { this.id = id; this.name = name; } public String getName() { return name; } public int getId() { return id; } @Override public String toString() { return "Product [id=" + id + ", name=" + name + "]"; } }