Как реализовать isEmpty() для hashmap с использованием stream?

#java #hashmap #java-stream

#java #hashmap #java-stream

Вопрос:

Я реализую свою собственную hashmap, максимально используя stream. Я не могу определить правильный синтаксис для isEmpty().

Я пробовал много форм:

  return buckets.entrySet().stream().forEach(List::isEmpty());
  

Вот часть кода:

 public class HashMap<K, V> implements Map<K, V> {

    private static final int DEFAULT_CAPACITY = 64;
    private List<List<Entry<K, V>>> buckets;
    private int modCount = 0;
    private KeySet keySet;
    private EntrySet entrySet;
    private ValuesCollection valColl;

    //CTOR
    public HashMap() {
         buckets = new ArrayList<>(DEFAULT_CAPACITY);

         for (int i = 0; i < DEFAULT_CAPACITY;   i) {
            buckets.add(i, new LinkedList<Entry<K, V>>());
         }
    }
}
  

Я хотел бы написать простой поток, подобный:

 return buckets.stream().mapToInt(List::size).sum();
  

для isEmpty().

Ответ №1:

Вы можете использовать это:

 public boolean isEmpty() {
    return buckets.stream().allMatch(List::isEmpty);
}
  

Это возвращает, true если buckets значение пусто или все подсписки пусты.

Комментарии:

1. Спасибо, это сработало, я подробнее рассмотрю allMatch().

2. Вы также можете посмотреть на anyMatch() и noneMatch() .