Каковы последствия доступности использования фреймворка, например angularjs?

Я придумал следующую реализацию Collector для решения этой проблемы. Это написано в Groovy, поэтому вам придется адаптировать его, если вы используете только Java, но у него есть преимущество в поддержке потока произвольных типов, если эти типы поддерживаются ctor BigDecimal:

public static <T> Collector<T, ?, BigDecimal> summingBigDecimal() {
    new java.util.stream.Collectors.CollectorImpl<?, ?, BigDecimal>(
            { [BigDecimal.ZERO].toArray(new BigDecimal[1]) },
            { BigDecimal[] a, Object t ->
                a[0] = (t instanceof BigDecimal ? a[0].add(t) : a[0].add(new BigDecimal(t)))
            },
            { BigDecimal[] a, BigDecimal[] b -> a[0].add(b[0]) },
            { BigDecimal[] a -> a[0] }, Collections.emptySet());
}

Я уверен, что его можно немного очистить, но он может делать такие вещи, как:

Stream.of("1", 3L, new BigDecimal("5")).collect(Collectors.summingBigDecimal())

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

30
задан Édouard Lopez 18 January 2016 в 09:08
поделиться