Подтвердить что ты не робот

Сравнение guava vs Scala коллекции

Существует много общих понятий:

  • неизменяемая коллекция,
  • просмотр коллекции,
  • строгая/не строгая коллекция,
  • сборщики

те же шаблоны в Guava и Scala API коллекции. Так в чем же разница? Являются ли обе библиотеки совместимыми с шаблонами? Является ли приемлемость расширения достаточной?

Поэтому я хотел бы услышать сравнение этих фреймворков с тем, кто их использует.

4b9b3361

Ответ 1

Google Guava - фантастическая библиотека, в этом нет никаких сомнений. Однако он реализован на Java и страдает от всех ограничений, которые это подразумевает:

  • Нет неизменяемого интерфейса коллекции в стандартной библиотеке
  • Нет лямбда-литералов (затворов), поэтому там есть тяжелый шаблон вокруг типов SAM, необходимых для, например, предикаты
  • много дублирования в спецификациях типа, особенно в тех случаях, когда задействованы генерические средства

Guava также должен существовать в присутствии стандартной библиотеки коллекций Java, поэтому редко бывает, что сторонние библиотеки будут выставлять гуаво-совместимые литералы функций или использовать типы коллекции, специфичные для guava. Это вызывает несоответствие импеданса для каждой сторонней библиотеки, которую вы используете. Например, вы обычно захотите преобразовать возвращенные коллекции из таких библиотек в соответствующую неизменяемую коллекцию guava, особенно если вы работаете в многопоточной среде.

Коллекции

Scala имеют дизайн, который намного лучше интегрирован в язык, вы найдете их широко используемыми во всей стандартной библиотеке scala и через сторонние продукты, реализованные в Scala. Коллекции scala также неизменяемы по умолчанию, поэтому вы получаете гораздо более безопасный код, который не требует дополнительного слоя оборонительной упаковки.

Если вы можете использовать Scala, тогда сделайте это, у него много преимуществ помимо рамки коллекций. Если вам нужно использовать Java, то Guava - хороший выбор, особенно учитывая, что коллекции scala не особенно удобны в использовании без языковых функций, предоставляемых scala.

В смешанном проекте коллекции Guava префектно используются из Scala, но язык также предоставляет механизмы, позволяющие использовать коллекции Java (включая Guava, которые выставляют одни и те же интерфейсы), как если бы они были scala собственными коллекциями.

Ответ 2

Я использую guava во всех моих проектах java. Это дает хорошее функциональное касание к коллекциям java с похожими шаблонами.

Однако запись замыканий в java означает определение большого количества анонимного класса, который является подробным и скучным.

Scala коллекции по-прежнему превосходят по дизайну (с каскадом частичных реализаций из-за признаков) и функциональными возможностями. Легко создать собственную коллекцию и получить все преимущества коллекций scala, просто внедряя небольшой набор методов.

Ответ 3

Другие уже ответили на ваш вопрос, но я думаю, вы пропустили интересную альтернативу, Функциональную Java. Он игнорирует API Java Collection и предоставляет неизменные коллекции, которые выглядят и ведут себя как упрощенные коллекции Scala.

Ответ 4

Я использовал Scala, коллекцию Google и F #. В последнее время я использую итераторы коллекций Google и теряю силу выражений последовательности F #. Кажется, что Scala предпочитает нестрогие (ленивые) списки над итераторами/последовательностями.

В коллекциях F # и Google (см. Итераторы Google) вы можете преобразовывать и фильтровать итераторы, создавая хороший push-конвейер работы, который представлен как поток объектов. Это не значит, что вы не можете сделать это в Scala, это просто не так. F # имеет классный оператор для фильтрации итераторов (последовательностей).

Например, я ожидал бы выражения выражения Scala для генерации итератора, такого как Python (или блоков последовательности F #), вместо этого он возвращает список.

Оба очень похожи, а Scala имеет огромные преимущества с точки зрения скорости и синтаксиса, но при их использовании я чувствую (мое мнение):

  • Коллекции Google сосредоточены на Map и Iterator.
  • Scala очень сфокусирован на списке.

ПРИМЕЧАНИЕ: Scala 2.8 внес существенные изменения в свои коллекции (я использовал более старую версию Scala).