Имеет ли стандартная библиотека Java какие-либо функциональные структуры данных, такие как неизменяемые наборы, списки и т.д. с функциональным обновлением?
Структуры функциональных данных в Java
Ответ 1
Функциональная java имеет Наборы, списки и более интересные абстракции.
Ответ 2
Посмотрите на проект pcollections:
PCollections служит постоянным и неизменным аналогом Framework Java Collections. Это включает эффективные, потокобезопасные, общие, неизменные и постоянные стеки, карты, векторы, наборы и пакеты, совместимые со своими коллегами Java Collections.
Постоянный и неизменный тип данных все чаще оценивается как простая, дружественная к дизайну, concurrency дружественная, а иногда и более эффективная по времени и пространству альтернатива изменяемым типам данных.
Ответ 3
Похоже, вы ищете Scala. Он компилируется в .class, так что достаточно хорошо, правильно?
Ответ 4
Вам не нужно scala. Просто передайте свою коллекцию в:
java.util.Collections.unmodifiableCollection(/* Collection<? extends T> c */);
java.util.Collections.unmodifiableSet(Set s);
java.util.Collections.unmodifiableMap(Map m);
java.util.Collections.unmodifiableList(List l);
Я только что увидел это из другого вопроса:
Google ImmutableSet
из документов:
В отличие от Collections.unmodifiableSet(java.util.Set), который представляет собой отдельный которые все еще могут измениться, экземпляр этого класса содержит собственные личные данные и никогда не будут изменение. Этот класс удобен для публичные статические конечные множества ( "постоянная наборы" ), а также позволяет легко сделать "защитная копия" набора, предусмотренного для ваш класс вызывающим.
отредактирован для включения комментария.
Ответ 5
Ну, есть два возможных подхода к "изменению" неизменяемой коллекции:
-
Сделайте копию, которая включает в себя "изменение"
-
Создайте новый, другой объект, который состоит из ссылки на исходный объект и ссылки на описание изменения.
Clojure использует последний подход, поэтому становится довольно быстро создавать много братьев и сестер оригинальной коллекции с небольшими исправлениями для каждого с разумными требованиями к памяти. Но большинство Java-кода имеют тенденцию перейти к первому варианту.
Для чего это стоит, Google создал несколько коллекций, которые поддерживают программирование в функциональном стиле: http://code.google.com/p/google-collections/, но у меня нет посмотрел на них в глубину.
Ответ 6
Всегда приятно видеть коллекцию Google Collections, но нет, у нас этого нет. Я не знаю ни одной библиотеки Java, которая делает. Внутри Google мы реализовали некоторые функциональные структуры List, и угадайте, что? Никто их не использует. Поэтому они вряд ли скоро станут открытыми.
Ответ 7
Строки и числа неизменяемы функционально, но большинство коллекций не являются (неизменные коллекции вызывают исключения при добавлении, удалении и т.д.). CopyOnWriteArrayList
и CopyOnWriteArraySet
являются ближайшими В этом смысле.
Ответ 8
Если вы заинтересованы в манипуляциях с коллекциями в функциональном стиле, посмотрите lambdaj
Ответ 9
Я знаю, что это старый вопрос, но немного по поиску говорит мне, что теперь у нас есть альтернатива функциональной Java.
JavasLang выглядит как интересная библиотека для декларативного программирования и функциональных структур данных в Java.
Я не сравнивал его с Functional Java с точки зрения простоты использования и производительности, но мне бы хотелось получить какие-либо указатели на это.
Ответ 10
Посмотрите Коллекции Google.