Java 类java.util.stream.Collector 实例源码
项目:guava-mock
文件:ImmutableTableTest.java
public void testToImmutableTable() {
Collector<Cell<String, String, Integer>, ?, ImmutableTable<String, String, Integer>> collector =
ImmutableTable.toImmutableTable(Cell::getRowKey, Cell::getColumnKey, Cell::getValue);
Equivalence<ImmutableTable<String, String, Integer>> equivalence =
Equivalence.equals()
.<Cell<String, String, Integer>>pairwise()
.onResultOf(ImmutableTable::cellSet);
CollectorTester.of(collector, equivalence)
.expectCollects(
new ImmutableTable.Builder<String, String, Integer>()
.put("one", "uno", 1)
.put("two", "dos", 2)
.put("three", "tres", 3)
.build(),
Tables.immutableCell("one", "uno", 1),
Tables.immutableCell("two", "dos", 2),
Tables.immutableCell("three", "tres", 3));
}
项目:collectors-utils
文件:GroupingByAndAllMaxTest.java
@Test @SuppressWarnings("unchecked")
public void should_create_the_correct_stream_on_groupingBy_then_all_max_with_several_maxes_in_a_set() {
// Given
Stream<String> strings = Stream.of("one", "two", "two", "three", "three", "three", "four", "four", "four");
Collector<String, ?, Set<Map.Entry<String, Long>>> collector =
CollectorsUtils.groupingByAndAllMaxBy(
identity(),
HashSet::new,
Collectors.counting(),
Map.Entry.comparingByValue()
);
// When
Set<Map.Entry<String, Long>> result = strings.collect(collector);
// Then
assertThat(result.size()).isEqualTo(2);
assertThat(result).isExactlyInstanceOf(HashSet.class);
assertThat(result).contains(new AbstractMap.SimpleImmutableEntry<>("three", 3L));
assertThat(result).contains(new AbstractMap.SimpleImmutableEntry<>("four", 3L));
}
项目:collectors-utils
文件:GroupingByAndMaxByTest.java
@Test
public void should_return_an_empty_optional_for_groupingBy_and_maxBy_on_an_empty_stream() {
// Given
Stream<String> strings = Stream.empty();
Collector<String, ?, Optional<Map.Entry<String, Long>>> collector =
CollectorsUtils.groupingByAndMaxBy(
identity(),
counting(),
Map.Entry.comparingByValue()
);
// When
Optional<Map.Entry<String, Long>> result = strings.collect(collector);
// Then
assertThat(result.isPresent()).isFalse();
}
项目:collectors-utils
文件:GroupingByAndMaxByTest.java
@Test
public void should_return_an_empty_optional_for_groupingBy_and_max_by_value_with_a_comparator_on_an_empty_stream() {
// Given
Stream<String> strings = Stream.empty();
Collector<String, ?, Optional<Map.Entry<String, Long>>> collector =
CollectorsUtils.groupingByAndMaxByValue(
identity(),
counting(),
Comparator.reverseOrder()
);
// When
Optional<Map.Entry<String, Long>> result = strings.collect(collector);
// Then
assertThat(result.isPresent()).isFalse();
}
项目:collectors-utils
文件:GroupingByThenStreamTest.java
@Test
public void should_create_the_correct_stream_on_groupingBy_for_an_empty_stream() {
// Given
Stream<String> strings = Stream.empty();
Collector<String, ?, Stream<Map.Entry<Integer, List<String>>>> groupingByThenStream =
CollectorsUtils.groupingByThenStream(
String::length
);
// When
List<Map.Entry<Integer, List<String>>> entries =
strings.collect(groupingByThenStream).collect(Collectors.toList());
// Then
assertThat(entries).isEmpty();
}
项目:googles-monorepo-demo
文件:Multisets.java
/**
* Returns a {@code Collector} that accumulates elements into a multiset created via the specified
* {@code Supplier}, whose elements are the result of applying {@code elementFunction} to the
* inputs, with counts equal to the result of applying {@code countFunction} to the inputs.
* Elements are added in encounter order.
*
* <p>If the mapped elements contain duplicates (according to {@link Object#equals}), the element
* will be added more than once, with the count summed over all appearances of the element.
*
* <p>Note that {@code stream.collect(toMultiset(function, e -> 1, supplier))} is equivalent to
* {@code stream.map(function).collect(Collectors.toCollection(supplier))}.
*
* @since 22.0
*/
public static <T, E, M extends Multiset<E>> Collector<T, ?, M> toMultiset(
java.util.function.Function<T, E> elemFunction,
java.util.function.ToIntFunction<T> countFunction,
java.util.function.Supplier<M> implSupplier) {
checkNotNull(elemFunction);
checkNotNull(countFunction);
checkNotNull(implSupplier);
return Collector.of(
implSupplier,
(ms, t) -> ms.add(elemFunction.apply(t), countFunction.applyAsInt(t)),
(ms1, ms2) -> {
ms1.addAll(ms2);
return ms1;
});
}
项目:collectors-utils
文件:FlatMappingTest.java
@Test
public void should_collect_flat_map_with_a_downstream_collector_and_a_flat_mapper_a_non_empty_stream_into_a_stream() {
// Given
Stream<String> strings = Stream.of("one", "two", "three");
Function<String, Stream<Character>> streamMapper = string -> string.chars().mapToObj(letter -> (char)letter);
Collector<Stream<Character>, ?, Stream<Stream<Character>>> downstream = CollectorsUtils.mapToStream();
Function<Stream<Character>, Stream<String>> mapper = stream -> stream.map(letter -> Character.toString(letter));
Collector<String, ?, Stream<String>> streamCollector = CollectorsUtils.flatMapping(streamMapper, downstream, mapper);
// When
List<String> characters = strings.collect(streamCollector).collect(toList());
// Then
assertThat(characters.size()).isEqualTo(11);
assertThat(characters).containsExactly("o", "n", "e", "t", "w", "o", "t", "h", "r", "e", "e");
}
项目:collectors-utils
文件:GroupingByAndAllMaxTest.java
@Test
public void should_create_the_correct_stream_on_groupingBy_then_n_maxes_with_one_max_and_n_bigger() {
// Given
Stream<String> strings = Stream.of("one", "two", "two", "three", "three", "four", "four", "four");
Collector<String, ?, List<Map.Entry<String, Long>>> collector =
CollectorsUtils.groupingByAndMaxesBy(
identity(),
counting(),
10,
Map.Entry.comparingByValue()
);
// When
List<Map.Entry<String, Long>> result = strings.collect(collector);
// Then
assertThat(result.size()).isEqualTo(4);
assertThat(result).containsExactly(
new AbstractMap.SimpleImmutableEntry<>("four", 3L),
new AbstractMap.SimpleImmutableEntry<>("three", 2L),
new AbstractMap.SimpleImmutableEntry<>("two", 2L),
new AbstractMap.SimpleImmutableEntry<>("one", 1L)
);
}
项目:collectors-utils
文件:ToStreamTest.java
@Test
public void should_stream_a_empty_stream_with_a_collection_mapper_into_the_correct_stream() {
// Given
Stream<String> strings = Stream.of("Hello", "world");
Function<String, List<Character>> mapper = (String s) -> s.chars().mapToObj(letter -> (char)letter).collect(toList());
// When
Collector<String, ?, Stream<Stream<Character>>> collector = CollectorsUtils.mapToStream(mapper);
Stream<Stream<Character>> result = strings.collect(collector);
List<List<Character>> list = result.map(stream -> stream.collect(toList())).collect(toList());
// Then
assertThat(list.size()).isEqualTo(2);
assertThat(list.get(0)).containsExactly('H', 'e', 'l', 'l', 'o');
assertThat(list.get(1)).containsExactly('w', 'o', 'r', 'l', 'd');
}
项目:collectors-utils
文件:GroupingByThenStreamTest.java
@Test
public void should_create_the_correct_stream_on_groupingBy_with_a_downstream_for_an_empty_stream() {
// Given
Stream<String> strings = Stream.empty();
Collector<String, ?, Stream<Map.Entry<Integer, Long>>> groupingByThenStream =
CollectorsUtils.groupingByThenStream(
String::length, counting()
);
// When
List<Map.Entry<Integer, Long>> entries =
strings.collect(groupingByThenStream).collect(Collectors.toList());
// Then
assertThat(entries).isEmpty();
}
项目:googles-monorepo-demo
文件:ImmutableSetMultimapTest.java
public void testFlatteningToImmutableSetMultimap() {
Collector<String, ?, ImmutableSetMultimap<Character, Character>> collector =
ImmutableSetMultimap.flatteningToImmutableSetMultimap(
str -> str.charAt(0), str -> str.substring(1).chars().mapToObj(c -> (char) c));
BiPredicate<Multimap<?, ?>, Multimap<?, ?>> equivalence =
Equivalence.equals()
.onResultOf((Multimap<?, ?> mm) -> ImmutableList.copyOf(mm.asMap().entrySet()))
.and(Equivalence.equals());
ImmutableSetMultimap<Character, Character> empty = ImmutableSetMultimap.of();
ImmutableSetMultimap<Character, Character> filled =
ImmutableSetMultimap.<Character, Character>builder()
.putAll('b', Arrays.asList('a', 'n', 'a', 'n', 'a'))
.putAll('a', Arrays.asList('p', 'p', 'l', 'e'))
.putAll('c', Arrays.asList('a', 'r', 'r', 'o', 't'))
.putAll('a', Arrays.asList('s', 'p', 'a', 'r', 'a', 'g', 'u', 's'))
.putAll('c', Arrays.asList('h', 'e', 'r', 'r', 'y'))
.build();
CollectorTester.of(collector, equivalence)
.expectCollects(empty)
.expectCollects(filled, "banana", "apple", "carrot", "asparagus", "cherry");
}
项目:collectors-utils
文件:GroupingByAndAllMaxTest.java
@Test
public void should_create_the_correct_stream_on_groupingBy_then_n_maxes_with_several_maxes_more_n_results() {
// Given
Stream<String> strings = Stream.of("one", "two", "two", "three", "three", "four", "four");
Collector<String, ?, List<Map.Entry<String, Long>>> collector =
CollectorsUtils.groupingByAndMaxesBy(
identity(),
counting(),
2,
Map.Entry.comparingByValue()
);
// When
List<Map.Entry<String, Long>> result = strings.collect(collector);
// Then
assertThat(result.size()).isEqualTo(3);
assertThat(result).containsExactly(
new AbstractMap.SimpleImmutableEntry<>("four", 2L),
new AbstractMap.SimpleImmutableEntry<>("three", 2L),
new AbstractMap.SimpleImmutableEntry<>("two", 2L)
);
}
项目:collectors-utils
文件:GroupingByAndAllMaxTest.java
@Test @SuppressWarnings("unchecked")
public void should_create_the_correct_stream_on_groupingBy_then_all_max_by_value_with_several_maxes() {
// Given
Stream<String> strings = Stream.of("one", "two", "two", "three", "three", "three", "four", "four", "four");
Collector<String, ?, Set<Map.Entry<String, Long>>> collector =
CollectorsUtils.groupingByAndAllMaxByValue(
Function.<String>identity(),
counting()
);
// When
Set<Map.Entry<String, Long>> result = strings.collect(collector);
// Then
assertThat(result.size()).isEqualTo(2);
assertThat(result).contains(new AbstractMap.SimpleImmutableEntry<>("three", 3L));
assertThat(result).contains(new AbstractMap.SimpleImmutableEntry<>("four", 3L));
}
项目:collectors-utils
文件:FlatMappingTest.java
@Test
public void should_collect_flat_map_with_a_downstream_collector_a_non_empty_stream_into_a_stream() {
// Given
Stream<String> strings = Stream.of("one", "two", "three");
Function<String, Stream<Character>> streamMapper = string -> string.chars().mapToObj(letter -> (char)letter);
Collector<Stream<Character>, ?, Stream<Stream<Character>>> downstream = CollectorsUtils.mapToStream();
Collector<String, ?, Stream<Character>> streamCollector = CollectorsUtils.flatMapping(streamMapper, downstream);
// When
List<Character> characters = strings.collect(streamCollector).collect(toList());
// Then
assertThat(characters.size()).isEqualTo(11);
assertThat(characters).containsExactly('o', 'n', 'e', 't', 'w', 'o', 't', 'h', 'r', 'e', 'e');
}
项目:guava-mock
文件:ImmutableSortedMapTest.java
public void testToImmutableSortedMapMerging() {
Collector<Entry<String, Integer>, ?, ImmutableSortedMap<String, Integer>> collector =
ImmutableSortedMap.toImmutableSortedMap(
Comparator.naturalOrder(), Entry::getKey, Entry::getValue, Integer::sum);
Equivalence<ImmutableMap<String, Integer>> equivalence =
Equivalence.equals()
.<Entry<String, Integer>>pairwise()
.onResultOf(ImmutableMap::entrySet);
CollectorTester.of(collector, equivalence)
.expectCollects(
ImmutableSortedMap.of("one", 1, "three", 3, "two", 4),
mapEntry("one", 1),
mapEntry("two", 2),
mapEntry("three", 3),
mapEntry("two", 2));
}
项目:collectors-utils
文件:MaxEntryValueByCountingTest.java
@Test
public void should_return_an_empty_map_for_max_entry_value_by_counting_on_an_empty_stream() {
// Given
Map<Integer, Stream<String>> map = new HashMap<>();
Stream<Map.Entry<Integer, Stream<String>>> entries =
FunctionsUtils.<Integer, Stream<String>>toStreamOfEntries().apply(map);
Collector<Map.Entry<Integer, Stream<String>>, ?, Map<Integer, Map.Entry<String, Long>>> collector =
CollectorsUtils.maxEntryValueByCounting();
// When
Map<Integer, Map.Entry<String, Long>> collect = entries.collect(collector);
// Then
assertThat(collect).isEmpty();
}
项目:collectors-utils
文件:GroupingByAndMaxByTest.java
@Test
public void should_return_the_result_for_groupingBy_and_max_by_value_with_a_comparator_on_a_non_empty_stream() {
// Given
Stream<String> strings = Stream.of("one", "one", "two", "two", "two");
Collector<String, ?, Optional<Map.Entry<String, Long>>> collector =
CollectorsUtils.groupingByAndMaxByValue(
identity(),
counting(),
Comparator.reverseOrder()
);
// When
Optional<Map.Entry<String, Long>> result = strings.collect(collector);
// Then
assertThat(result.isPresent()).isTrue();
assertThat(result.get()).isEqualTo(new AbstractMap.SimpleImmutableEntry<>("one", 2L));
}
项目:googles-monorepo-demo
文件:ImmutableListMultimapTest.java
public void testToImmutableListMultimap() {
Collector<Entry<String, Integer>, ?, ImmutableListMultimap<String, Integer>> collector =
ImmutableListMultimap.toImmutableListMultimap(Entry::getKey, Entry::getValue);
BiPredicate<ImmutableListMultimap<?, ?>, ImmutableListMultimap<?, ?>> equivalence =
Equivalence.equals()
.onResultOf((ImmutableListMultimap<?, ?> mm) -> mm.asMap().entrySet().asList())
.and(Equivalence.equals());
CollectorTester.of(collector, equivalence)
.expectCollects(ImmutableListMultimap.of())
.expectCollects(
ImmutableListMultimap.of("a", 1, "b", 2, "a", 3, "c", 4),
mapEntry("a", 1),
mapEntry("b", 2),
mapEntry("a", 3),
mapEntry("c", 4));
}
项目:guava-mock
文件:ImmutableListMultimapTest.java
public void testFlatteningToImmutableListMultimap() {
Collector<String, ?, ImmutableListMultimap<Character, Character>> collector =
ImmutableListMultimap.flatteningToImmutableListMultimap(
str -> str.charAt(0), str -> str.substring(1).chars().mapToObj(c -> (char) c));
BiPredicate<Multimap<?, ?>, Multimap<?, ?>> equivalence =
Equivalence.equals()
.onResultOf((Multimap<?, ?> mm) -> ImmutableList.copyOf(mm.asMap().entrySet()))
.and(Equivalence.equals());
ImmutableListMultimap<Character, Character> empty = ImmutableListMultimap.of();
ImmutableListMultimap<Character, Character> filled =
ImmutableListMultimap.<Character, Character>builder()
.putAll('b', Arrays.asList('a', 'n', 'a', 'n', 'a'))
.putAll('a', Arrays.asList('p', 'p', 'l', 'e'))
.putAll('c', Arrays.asList('a', 'r', 'r', 'o', 't'))
.putAll('a', Arrays.asList('s', 'p', 'a', 'r', 'a', 'g', 'u', 's'))
.putAll('c', Arrays.asList('h', 'e', 'r', 'r', 'y'))
.build();
CollectorTester.of(collector, equivalence)
.expectCollects(empty)
.expectCollects(filled, "banana", "apple", "carrot", "asparagus", "cherry");
}
项目:guava-mock
文件:ImmutableTable.java
/**
* Returns a {@code Collector} that accumulates elements into an {@code ImmutableTable}. Each
* input element is mapped to one cell in the returned table, with the rows, columns, and values
* generated by applying the specified functions.
*
* <p>The returned {@code Collector} will throw a {@code NullPointerException} at collection time
* if the row, column, or value functions return null on any input.
*
* @since 21.0
*/
@Beta
public static <T, R, C, V> Collector<T, ?, ImmutableTable<R, C, V>> toImmutableTable(
Function<? super T, ? extends R> rowFunction,
Function<? super T, ? extends C> columnFunction,
Function<? super T, ? extends V> valueFunction) {
checkNotNull(rowFunction);
checkNotNull(columnFunction);
checkNotNull(valueFunction);
return Collector.of(
() -> new ImmutableTable.Builder<R, C, V>(),
(builder, t) ->
builder.put(rowFunction.apply(t), columnFunction.apply(t), valueFunction.apply(t)),
(b1, b2) -> b1.combine(b2),
b -> b.build());
}
项目:collectors-utils
文件:GroupingByAndAllMaxTest.java
@Test
public void should_create_the_correct_stream_on_groupingBy_then_n_maxes_with_several_maxes_and_n_greater() {
// Given
Stream<String> strings = Stream.of("one", "two", "two", "three", "three", "three", "four", "four", "four");
Collector<String, ?, List<Map.Entry<String, Long>>> collector =
CollectorsUtils.groupingByAndMaxesBy(
identity(),
counting(),
10,
Map.Entry.comparingByValue()
);
// When
List<Map.Entry<String, Long>> result = strings.collect(collector);
// Then
assertThat(result.size()).isEqualTo(4);
assertThat(result).containsExactly(
new AbstractMap.SimpleImmutableEntry<>("four", 3L),
new AbstractMap.SimpleImmutableEntry<>("three", 3L),
new AbstractMap.SimpleImmutableEntry<>("two", 2L),
new AbstractMap.SimpleImmutableEntry<>("one", 1L)
);
}
项目:googles-monorepo-demo
文件:ImmutableSortedMapTest.java
public void testToImmutableSortedMap() {
Collector<Entry<String, Integer>, ?, ImmutableSortedMap<String, Integer>> collector =
ImmutableSortedMap.toImmutableSortedMap(
String.CASE_INSENSITIVE_ORDER, Entry::getKey, Entry::getValue);
BiPredicate<ImmutableSortedMap<String, Integer>, ImmutableSortedMap<String, Integer>>
equivalence =
Equivalence.equals().onResultOf(ImmutableSortedMap<String, Integer>::comparator)
.and(Equivalence.equals().onResultOf(map -> map.entrySet().asList()))
.and(Equivalence.equals());
ImmutableSortedMap<String, Integer> expected =
ImmutableSortedMap.<String, Integer>orderedBy(String.CASE_INSENSITIVE_ORDER)
.put("one", 1)
.put("three", 3)
.put("two", 2)
.build();
CollectorTester.of(collector, equivalence)
.expectCollects(expected, mapEntry("one", 1), mapEntry("two", 2), mapEntry("three", 3));
}
项目:collectors-utils
文件:ToStreamTest.java
@Test
public void should_stream_a_empty_stream_with_a_stream_mapper_into_the_correct_stream() {
// Given
Stream<String> strings = Stream.of("Hello", "world");
Function<String, Stream<Character>> mapper = (String s) -> s.chars().mapToObj(letter -> (char)letter);
// When
Collector<String, ?, Stream<Stream<Character>>> collector = CollectorsUtils.toStream(mapper);
Stream<Stream<Character>> result = strings.collect(collector);
List<List<Character>> list = result.map(stream -> stream.collect(toList())).collect(toList());
// Then
assertThat(list.size()).isEqualTo(2);
assertThat(list.get(0)).containsExactly('H', 'e', 'l', 'l', 'o');
assertThat(list.get(1)).containsExactly('w', 'o', 'r', 'l', 'd');
}
项目:collectors-utils
文件:GroupingByAndAllMaxTest.java
@Test
public void should_create_the_correct_stream_on_groupingBy_then_all_max_by_value_and_a_result_supplier_with_several_maxes() {
// Given
Stream<String> strings = Stream.of("one", "one", "two", "two", "three", "three", "three", "four", "four", "four");
Collector<String, ?, List<Map.Entry<String, Long>>> collector =
CollectorsUtils.groupingByAndAllMaxByValue(
Function.<String>identity(),
ArrayList::new,
counting()
);
// When
List<Map.Entry<String, Long>> result = strings.collect(collector);
// Then
assertThat(result.size()).isEqualTo(2);
assertThat(result).isExactlyInstanceOf(ArrayList.class);
assertThat(result).contains(new AbstractMap.SimpleImmutableEntry<>("three", 3L));
assertThat(result).contains(new AbstractMap.SimpleImmutableEntry<>("four", 3L));
}
项目:googles-monorepo-demo
文件:ImmutableTableTest.java
public void testToImmutableTableMerging() {
Collector<Cell<String, String, Integer>, ?, ImmutableTable<String, String, Integer>> collector =
ImmutableTable.toImmutableTable(
Cell::getRowKey, Cell::getColumnKey, Cell::getValue, Integer::sum);
Equivalence<ImmutableTable<String, String, Integer>> equivalence =
Equivalence.equals()
.<Cell<String, String, Integer>>pairwise()
.onResultOf(ImmutableTable::cellSet);
CollectorTester.of(collector, equivalence)
.expectCollects(
new ImmutableTable.Builder<String, String, Integer>()
.put("one", "uno", 1)
.put("two", "dos", 6)
.put("three", "tres", 3)
.build(),
Tables.immutableCell("one", "uno", 1),
Tables.immutableCell("two", "dos", 2),
Tables.immutableCell("three", "tres", 3),
Tables.immutableCell("two", "dos", 4));
}
项目:googles-monorepo-demo
文件:Tables.java
/**
* Returns a {@link Collector} that accumulates elements into a {@code Table} created using the
* specified supplier, whose cells are generated by applying the provided mapping functions to the
* input elements. Cells are inserted into the generated {@code Table} in encounter order.
*
* <p>If multiple input elements map to the same row and column, an {@code IllegalStateException}
* is thrown when the collection operation is performed.
*
* @since 21.0
*/
@Beta
public static <T, R, C, V, I extends Table<R, C, V>> Collector<T, ?, I> toTable(
java.util.function.Function<? super T, ? extends R> rowFunction,
java.util.function.Function<? super T, ? extends C> columnFunction,
java.util.function.Function<? super T, ? extends V> valueFunction,
java.util.function.Supplier<I> tableSupplier) {
return toTable(
rowFunction,
columnFunction,
valueFunction,
(v1, v2) -> {
throw new IllegalStateException("Conflicting values " + v1 + " and " + v2);
},
tableSupplier);
}
项目:QuantTester
文件:LiquidityCollector.java
public static Collector<DetailedTick, ?, Map<Integer, Byte>> groupingBy(TIME_FRAME time_frame) {
return Collectors.groupingBy((tick) -> trim_time(tick.time, time_frame), new LiquidityCollector(time_frame));
}
项目:minebox
文件:Jdk8GuavaUtil.java
public static <T> Collector<T, ?, ImmutableList<T>> toImmutableList() {
Supplier<ImmutableList.Builder<T>> supplier = ImmutableList.Builder::new;
BiConsumer<ImmutableList.Builder<T>, T> accumulator = ImmutableList.Builder::add;
BinaryOperator<ImmutableList.Builder<T>> combiner = (l, r) -> l.addAll(r.build());
Function<ImmutableList.Builder<T>, ImmutableList<T>> finisher = ImmutableList.Builder::build;
return Collector.of(supplier, accumulator, combiner, finisher);
}
项目:minebox
文件:Jdk8GuavaUtil.java
public static <T> Collector<T, ?, ImmutableSet<T>> toImmutableSet() {
Supplier<ImmutableSet.Builder<T>> supplier = ImmutableSet.Builder::new;
BiConsumer<ImmutableSet.Builder<T>, T> accumulator = ImmutableSet.Builder::add;
BinaryOperator<ImmutableSet.Builder<T>> combiner = (l, r) -> l.addAll(r.build());
Function<ImmutableSet.Builder<T>, ImmutableSet<T>> finisher = ImmutableSet.Builder::build;
return Collector.of(supplier, accumulator, combiner, finisher);
}
项目:googles-monorepo-demo
文件:CollectCollectors.java
static <T, K, V> Collector<T, ?, ImmutableBiMap<K, V>> toImmutableBiMap(
Function<? super T, ? extends K> keyFunction,
Function<? super T, ? extends V> valueFunction) {
checkNotNull(keyFunction);
checkNotNull(valueFunction);
return Collector.of(
ImmutableBiMap.Builder<K, V>::new,
(builder, input) -> builder.put(keyFunction.apply(input), valueFunction.apply(input)),
ImmutableBiMap.Builder::combine,
ImmutableBiMap.Builder::build,
new Collector.Characteristics[0]);
}
项目:googles-monorepo-demo
文件:ImmutableSortedSetTest.java
public void testToImmutableSortedSet() {
Collector<String, ?, ImmutableSortedSet<String>> collector =
ImmutableSortedSet.toImmutableSortedSet(Ordering.natural());
BiPredicate<ImmutableSortedSet<String>, ImmutableSortedSet<String>> equivalence =
Equivalence.equals().onResultOf(ImmutableSortedSet<String>::comparator)
.and(Equivalence.equals().onResultOf(ImmutableSortedSet::asList))
.and(Equivalence.equals());
CollectorTester.of(collector, equivalence)
.expectCollects(
ImmutableSortedSet.of("a", "b", "c", "d"), "a", "b", "a", "c", "b", "b", "d");
}
项目:guava-mock
文件:ImmutableTableTest.java
public void testToImmutableTableConflict() {
Collector<Cell<String, String, Integer>, ?, ImmutableTable<String, String, Integer>> collector =
ImmutableTable.toImmutableTable(Cell::getRowKey, Cell::getColumnKey, Cell::getValue);
try {
Stream.of(Tables.immutableCell("one", "uno", 1), Tables.immutableCell("one", "uno", 2))
.collect(collector);
fail("Expected IllegalArgumentException");
} catch (IllegalArgumentException expected) {
}
}
项目:guava-mock
文件:TablesTest.java
public void testToTableNullValues() {
Collector<Cell<String, String, Integer>, ?, Table<String, String, Integer>> collector =
Tables.toTable(
Cell::getRowKey,
Cell::getColumnKey,
Cell::getValue,
() -> ArrayTable.create(ImmutableList.of("one"), ImmutableList.of("uno")));
try {
Stream.of(Tables.immutableCell("one", "uno", (Integer) null)).collect(collector);
fail("Expected NullPointerException");
} catch (NullPointerException expected) {
}
}
项目:collectors-utils
文件:FlatMappingTest.java
@Test
public void should_collect_flatmap_an_empty_stream_into_an_empty_stream() {
// Given
Stream<String> strings = Stream.empty();
Function<String, Stream<Character>> flatMapper = string -> string.chars().mapToObj(letter -> (char)letter);
Collector<String, ?, Stream<Character>> streamCollector = CollectorsUtils.flatMapping(flatMapper);
// When
List<Character> characters = strings.collect(streamCollector).collect(toList());
// Then
assertThat(characters).isEmpty();
}
项目:guava-mock
文件:ImmutableMapTest.java
public void testToImmutableMapMerging() {
Collector<Entry<String, Integer>, ?, ImmutableMap<String, Integer>> collector =
ImmutableMap.toImmutableMap(Entry::getKey, Entry::getValue, Integer::sum);
Equivalence<ImmutableMap<String, Integer>> equivalence =
Equivalence.equals()
.<Entry<String, Integer>>pairwise()
.onResultOf(ImmutableMap::entrySet);
CollectorTester.of(collector, equivalence)
.expectCollects(
ImmutableMap.of("one", 1, "two", 4, "three", 3),
mapEntry("one", 1),
mapEntry("two", 2),
mapEntry("three", 3),
mapEntry("two", 2));
}
项目:googles-monorepo-demo
文件:ImmutableSortedSetTest.java
public void testToImmutableSortedSet_customComparator() {
Collector<String, ?, ImmutableSortedSet<String>> collector =
ImmutableSortedSet.toImmutableSortedSet(String.CASE_INSENSITIVE_ORDER);
BiPredicate<ImmutableSortedSet<String>, ImmutableSortedSet<String>> equivalence =
(set1, set2) ->
set1.equals(set2) && set1.asList().equals(set2.asList())
&& set1.comparator().equals(set2.comparator());
ImmutableSortedSet<String> expected =
ImmutableSortedSet.orderedBy(String.CASE_INSENSITIVE_ORDER)
.add("a", "B", "c", "d")
.build();
CollectorTester.of(collector, equivalence)
.expectCollects(expected, "a", "B", "a", "c", "b", "b", "d");
}
项目:helper
文件:JsonBuilder.java
/**
* Returns a collector which forms a JsonArray from JsonElements
*
* @return a new collector
*/
public static Collector<JsonElement, JsonArrayBuilder, JsonArray> collectToArray() {
return Collector.of(
JsonBuilder::array,
JsonArrayBuilder::add,
(l, r) -> l.addAll(r.build()),
JsonArrayBuilder::build
);
}
项目:guava-mock
文件:ImmutableSortedMap.java
@Beta
public static <T, K, V> Collector<T, ?, ImmutableSortedMap<K, V>> toImmutableSortedMap(
Comparator<? super K> comparator,
Function<? super T, ? extends K> keyFunction,
Function<? super T, ? extends V> valueFunction) {
return CollectCollectors.toImmutableSortedMap(comparator, keyFunction, valueFunction);
}
项目:googles-monorepo-demo
文件:CollectorTester.java
/**
* Verifies that the specified expected result is always produced by collecting the
* specified inputs, regardless of how the elements are divided.
*/
@SafeVarargs
public final CollectorTester<T, A, R> expectCollects(@Nullable R expectedResult, T... inputs) {
List<T> list = Arrays.asList(inputs);
doExpectCollects(expectedResult, list);
if (collector.characteristics().contains(Collector.Characteristics.UNORDERED)) {
Collections.reverse(list);
doExpectCollects(expectedResult, list);
}
return this;
}
项目:openjdk-jdk10
文件:Feedback.java
private <E extends Enum<E>> void selectorToString(StringBuilder sb, Set<E> c, E[] values) {
if (!c.containsAll(Arrays.asList(values))) {
sb.append(c.stream()
.sorted((x, y) -> x.ordinal() - y.ordinal())
.map(v -> v.name().toLowerCase(Locale.US))
.collect(new Collector<CharSequence, StringJoiner, String>() {
@Override
public BiConsumer<StringJoiner, CharSequence> accumulator() {
return StringJoiner::add;
}
@Override
public Supplier<StringJoiner> supplier() {
return () -> new StringJoiner(",", (sb.length() == 0)? "" : "-", "")
.setEmptyValue("");
}
@Override
public BinaryOperator<StringJoiner> combiner() {
return StringJoiner::merge;
}
@Override
public Function<StringJoiner, String> finisher() {
return StringJoiner::toString;
}
@Override
public Set<Characteristics> characteristics() {
return Collections.emptySet();
}
}));
}
}