Недавно я внес свой вклад в фреймворк Eclipse Collections , внедрив новый тип данных под названием Triple. Это будет частью выпуска 10.3.0
Что такое Тройной
Тройка – это реализация кортежа, который может содержать 3 произвольных значения. Кортежи и, следовательно, Тройка также являются неизменяемыми конечными коллекциями с единственной целью группировки данных вместе. Кортежи являются хорошо известными и широко используемыми типами данных в информатике и изначально реализованы на многих языках Haskell, Erlang и Smalltalk, а также на Python и C#. Единственная вещь в Java, которая выглядит как реализация кортежа, – это Map. Запись
.
Кортеж в его чистом виде не обязан содержать только 2 элемента, более известный как 2-кортеж. В коллекциях Eclipse уже существовала реализация из 2 кортежей, называемая Pair. Это может содержать ровно 2 элемента, сгруппированных вместе. В языках, упомянутых выше, вы можете создавать кортежи, содержащие 3,4,5 или даже больше элементов. Оказалось, что использование кортежа, содержащего более 3 элементов, используется редко. Однако 2 пункта в некоторых случаях просто недостаточно. Отсюда и тройная реализация для коллекций Eclipse
Как это работает
Тройка может содержать 3 различных типа объектов, сгруппированных вместе. Если вы хотите хранить 3 объекта одного и того же типа, существует аналогичный тип, называемый Triplet, где тип всех трех элементов одинаков.
В следующем примере я группирую название страны с ее международным телефонным кодом и если они являются членами ЕС (Европейского союза). Эффективно я объединяю 3 типа: Строка
, int
и логическое значение
.
Tuples.triple("Netherlands", 31, true); Tuples.triple("United Kingdom", 44, false); Tuples.triple("Germany", 49, true);
Чтобы получить значения из тройки, вы можете использовать get One()
, get Two()
и get Three()
для получения соответствующих значений. Допустим, у меня есть список европейских стран, и я хочу напечатать только названия стран, являющихся членами ЕС. Используя тройку для реализации этого с коллекциями Eclipse, код будет выглядеть следующим образом.
var countries = Lists.immutable.of( Tuples.triple("Netherlands", 31, true), Tuples.triple("United Kingdom", 44, false), Tuples.triple("Germany", 49, true) ); var euCountries = countries .select(Triple::getThree) .collect(Triple::getOne); euCountries.forEach(System.out::println);
Примечание. В этом примере я использую Java 11, а тип стран – ImmutableTripletonList
Тройка может быть полезна во многих других сценариях. Вы можете подумать о добавлении метаинформации к вычислениям, таким как время начала и время окончания. Возврат тройки был бы отличным выбором для достижения этой цели. А иногда вам просто нужно вернуть более одного результата из метода.
Конечно, есть множество других способов добиться того же результата. Просто подумайте о тройном другом инструменте в наборе инструментов, который вы можете использовать, если хотите. Что еще более важно, программисты имеют разный опыт работы, и предоставление им инструментов, с которыми они предпочитают работать, таких как многозначные кортежи, делает Java более доступной. Даже если вы не можете работать с последней версией Java.
Демо-код доступен на Github
Оригинал: “https://dev.to/brianverm/eclipse-collections-now-supports-triples-dkl”