Поиск по этому блогу

Показаны сообщения с ярлыком Guava. Показать все сообщения
Показаны сообщения с ярлыком Guava. Показать все сообщения

вторник, 25 августа 2015 г.

Guava Lists.partition + gae objectify

Загружать данные из datastore при помощи objectify можно группами(то есть по частям). Для этого можно использовать средства из библиотеке Guava. Это метод Lists.partition, в который передаем два параметра - список ключей и количество элементов в группе (например 25).

for (List<String> list : Lists.partition(new ArrayList<>(ids), 25))

 Подготовленный лист с ключами передаем в метод ids и получаем список значений.

result.addAll(ofy().load().type(UserEntity.class).ids(list).values());


public List<UserEntity> getUserEntities(Collection<Long> userIds, Long systemId) {
    List<UserEntity> result = new ArrayList<>();
    if (userIds == null) {
      return result;
    }
    List<String> ids = new ArrayList<>();
    for (Long id : userIds) {
      ids.add(UserEntity.generateKey(systemId, id));
    }
    for (List<String> list : Lists.partition(new ArrayList<>(ids), 25)) {
      result.addAll(ofy().load().type(UserEntity.class).ids(list).values());
    }
    return result;
 }





понедельник, 14 июля 2014 г.

Guava. Filter Collections and Iterables

Guava - это библиотека, предоставляющая возможности функционального программирования.

Guava на Google Code

Guava на Wikipedia

Зависимость в POM.XML файле проекта (Если используем Maven для проекта)
<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>${guavaVersion}</version>
</dependency>


Фильтруем List

Для фильтрации List'a следующие классы необходимо импортировать.
import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
import com.google.common.collect.Lists;

Объявляем объект, реализующий интерфейс List.
private List<Document> displayList;

Фильтруем наш displayList. Создаем новый лист на основе исходного, но при этом в новый лист попадут только те элементы которые будут соответствовать условию, указанному в предикате. Например, тут в листе будут содержаться только не архивные документы.
displayList = Lists.newArrayList(
    Collections2.filter(displayList, new Predicate<Document>() { 
 
      @Override
      public boolean apply(Document document) {
        return !document.isArchived();
      }
    })
);
 
setupView(displayList);

Фильтруем Iterables

Для фильтрации Iterables следующие классы необходимо импортировать.
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;

Создаем список реализующий интерфейс List, он будет содержать объекты класса SchemaItem.
private List<SchemaItem> attributeList;

Допустим у нас есть объект класса Schema, который содержит в себе объекты SchemaItem и реализует интерфейс Iterable.
public class Schema implements Iterable<SchemaItem>

Фильтрованный лист будет создан на основе объекта реализующего интерфейс Iterable и содержащего объекты класса SchemaItem. В него попадут только те элементы, которые будут соответствовать условию в предикате.
attributeList = Lists.newArrayList(
  Iterables.filter(result, new Predicate<SchemaItem>() { 
 
    @Override
    public boolean apply(SchemaItem si) {
      return (si.getSearchable());
    }
  ));
setupView(attributeList);