public ComposableStatsCalculator(List<Rule<?>> rules) { this.rulesByRootType = rules.stream() .peek(rule -> { checkArgument(rule.getPattern() instanceof TypeOfPattern, "Rule pattern must be TypeOfPattern"); Class<?> expectedClass = ((TypeOfPattern<?>) rule.getPattern()).expectedClass(); checkArgument(!expectedClass.isInterface() && !Modifier.isAbstract(expectedClass.getModifiers()), "Rule must be registered on a concrete class"); }) .collect(toMultimap( rule -> ((TypeOfPattern<?>) rule.getPattern()).expectedClass(), rule -> rule, ArrayListMultimap::create)); }
private static Collector<JCVariableDecl, ?, ImmutableMultimap<Integer, JCVariableDecl>> collectByEditDistanceTo(String baseName) { return Collectors.collectingAndThen( Multimaps.toMultimap( (JCVariableDecl varDecl) -> LevenshteinEditDistance.getEditDistance(baseName, varDecl.name.toString()), varDecl -> varDecl, LinkedHashMultimap::create), ImmutableMultimap::copyOf); }
public void testMultimapCollectorGenerics() { ListMultimap<Integer, String> unused = Stream.of("foo", "bar", "quux") .collect( Multimaps.toMultimap( String::length, s -> s, MultimapBuilder.treeKeys().arrayListValues()::build)); }
private static Multimap<TypeVariableSymbol, TypeInfo> getResolvedGenerics( MethodInvocationTree tree) { Type type = ASTHelpers.getType(tree.getMethodSelect()); List<Type> from = new ArrayList<>(); List<Type> to = new ArrayList<>(); getSubst(type, from, to); Multimap<TypeVariableSymbol, TypeInfo> result = Streams.zip( from.stream(), to.stream(), (f, t) -> new TypeInfo((TypeVariableSymbol) f.asElement(), t, tree)) .collect( toMultimap( k -> k.sym, k -> k, MultimapBuilder.linkedHashKeys().arrayListValues()::build)); return result; }
.collect(Multimaps.toMultimap(Library::getLibraryKey, Function.identity(), MultimapBuilder.hashKeys().arrayListValues()::build));
public void testToMultimap() { Collector<Entry<String, Integer>, ?, TreeMultimap<String, Integer>> collector = Multimaps.toMultimap(Entry::getKey, Entry::getValue, TreeMultimap::create); BiPredicate<Multimap<?, ?>, Multimap<?, ?>> equivalence = Equivalence.equals() .onResultOf((Multimap<?, ?> mm) -> ImmutableList.copyOf(mm.asMap().entrySet())) .and(Equivalence.equals()); TreeMultimap<String, Integer> empty = TreeMultimap.create(); TreeMultimap<String, Integer> filled = TreeMultimap.create(); filled.put("a", 1); filled.put("a", 2); filled.put("b", 2); filled.put("c", 3); CollectorTester.of(collector, equivalence) .expectCollects(empty) .expectCollects( filled, mapEntry("a", 1), mapEntry("a", 2), mapEntry("b", 2), mapEntry("c", 3)); }
/** * Returns a {@code Collector} accumulating entries into an {@code ImmutableListMultimap}. * * <p>The keys of the entries are the result of applying the provided key mapping function while * the values are generated by applying the value mapping function and accumulated in the * encounter order of the stream. */ public static <T, K extends Comparable<K>, V> Collector<T, ?, ImmutableListMultimap<K, V>> groupingBySortedKeys( Function<? super T, ? extends K> keyFunction, Function<? super T, ? extends V> valueFunction) { return Collectors.collectingAndThen( Multimaps.toMultimap( keyFunction, valueFunction, MultimapBuilder.treeKeys().arrayListValues()::<K, V>build), ImmutableListMultimap::copyOf); }
/** * Creates a new REST APIs deployer. * * @param restApiProviders REST APIs providers * @param microservicesRegistrar Microservices registrar * @param serverConfiguration server configuration */ public RestApiDeployer(Set<RestApiProvider> restApiProviders, MicroservicesRegistrar microservicesRegistrar, ServerConfiguration serverConfiguration) { this.microservicesRegistrar = microservicesRegistrar; this.restApiProviders = restApiProviders.stream() .collect(toMultimap(RestApiProvider::getAppName, Function.identity(), HashMultimap::create)); this.serverConfiguration = serverConfiguration; this.microserviceRegistrations = new ConcurrentHashMap<>(); }
private static List<ImmutableDimensionModel> extractAllDimensions(List<FormTree> formScope) { Multimap<String,DimensionMapping> dimensionGroups = formScope.stream() .map(FormTree::getRootFields) .flatMap(List::stream) .flatMap(LongFormatTableBuilder::mapDimensions) .collect(Multimaps.toMultimap(Pair::getFirst, Pair::getSecond, ArrayListMultimap::create)); return buildModels(dimensionGroups); }
private HashMultimap<T, Failover<T>> groupByObjects() { return failoverList.stream() // .flatMap(failover -> failover.getAll().stream() // .map(it -> tuple(it, failover))) .collect(toMultimap(TwoTuple::getFirst, TwoTuple::getSecond, HashMultimap::create)); }
public ComposableStatsCalculator(List<Rule<?>> rules) { this.rulesByRootType = rules.stream() .peek(rule -> { checkArgument(rule.getPattern() instanceof TypeOfPattern, "Rule pattern must be TypeOfPattern"); Class<?> expectedClass = ((TypeOfPattern<?>) rule.getPattern()).expectedClass(); checkArgument(!expectedClass.isInterface() && !Modifier.isAbstract(expectedClass.getModifiers()), "Rule must be registered on a concrete class"); }) .collect(toMultimap( rule -> ((TypeOfPattern<?>) rule.getPattern()).expectedClass(), rule -> rule, ArrayListMultimap::create)); }
private static Collector<JCVariableDecl, ?, ImmutableMultimap<Integer, JCVariableDecl>> collectByEditDistanceTo(String baseName) { return Collectors.collectingAndThen( Multimaps.toMultimap( (JCVariableDecl varDecl) -> LevenshteinEditDistance.getEditDistance(baseName, varDecl.name.toString()), varDecl -> varDecl, LinkedHashMultimap::create), ImmutableMultimap::copyOf); }
public ComposableStatsCalculator(List<Rule<?>> rules) { this.rulesByRootType = rules.stream() .peek(rule -> { checkArgument(rule.getPattern() instanceof TypeOfPattern, "Rule pattern must be TypeOfPattern"); Class<?> expectedClass = ((TypeOfPattern<?>) rule.getPattern()).expectedClass(); checkArgument(!expectedClass.isInterface() && !Modifier.isAbstract(expectedClass.getModifiers()), "Rule must be registered on a concrete class"); }) .collect(toMultimap( rule -> ((TypeOfPattern<?>) rule.getPattern()).expectedClass(), rule -> rule, ArrayListMultimap::create)); }
public String printReportMarkdown(Collection<PostJobIssue> allIssues) { StringBuilder sb = new StringBuilder("## SonarQube analysis Overview"); sb.append(NEW_LINE); if (allIssues.isEmpty()) { sb.append("### No new issues detected!"); sb.append(NEW_LINE).append(NEW_LINE); } else { int issueNumber = allIssues.size(); if (issueNumber >= issueThreshold) { sb.append("### Too many issues detected "); sb.append("(").append(issueNumber).append("/").append(issueThreshold).append(")"); sb.append(": Issues cannot be displayed in Diff view.").append(NEW_LINE).append(NEW_LINE); } sb.append("| Total New Issues | ").append(issueNumber).append(" |").append(NEW_LINE); sb.append("|-----------------|------|").append(NEW_LINE); for (Severity severity : orderedSeverities) { sb.append(printIssueNumberBySeverityMarkdown(allIssues, severity)); } ListMultimap<RuleKey, PostJobIssue> uniqueInformation = allIssues.stream().collect(Multimaps.toMultimap(PostJobIssue::ruleKey, Function.identity(), ArrayListMultimap::create)); List<Map.Entry<RuleKey, List<PostJobIssue>>> uniqueSortedInformation = Multimaps.asMap(uniqueInformation) .entrySet().stream() .sorted(bySeverity.reversed()) .collect(Collectors.toList()); sb.append( formatTableList(uniqueSortedInformation)); } return sb.toString(); }
private static Multimap<TypeVariableSymbol, TypeInfo> getResolvedGenerics( MethodInvocationTree tree) { Type type = ASTHelpers.getType(tree.getMethodSelect()); List<Type> from = new ArrayList<>(); List<Type> to = new ArrayList<>(); getSubst(type, from, to); Multimap<TypeVariableSymbol, TypeInfo> result = Streams.zip( from.stream(), to.stream(), (f, t) -> new TypeInfo((TypeVariableSymbol) f.asElement(), t, tree)) .collect( toMultimap( k -> k.sym, k -> k, MultimapBuilder.linkedHashKeys().arrayListValues()::build)); return result; }
public void testMultimapCollectorGenerics() { ListMultimap<Integer, String> unused = Stream.of("foo", "bar", "quux") .collect( Multimaps.toMultimap( String::length, s -> s, MultimapBuilder.treeKeys().arrayListValues()::build)); }
@Override public AnswerElement answer() { DetectLoopsQuestion question = (DetectLoopsQuestion) _question; Set<Flow> flows = _batfish.bddLoopDetection(); /* * There can be many flows exercising the same loop, so let's pick one per dstIp. */ Multimap<Ip, Flow> flowsPerDst = flows.stream() .collect( Multimaps.toMultimap(Flow::getDstIp, Functions.identity(), HashMultimap::create)); flows = flowsPerDst.asMap().values().stream() .flatMap(flowsWithSameDst -> flowsWithSameDst.stream().limit(1)) .collect(Collectors.toSet()); if (_batfish.debugFlagEnabled("oldtraceroute")) { FlowHistory flowHistory = _batfish.flowHistory(flows, false); Multiset<Row> rows = flowHistoryToRows(flowHistory); TableAnswerElement table = new TableAnswerElement(createMetadata(false)); table.postProcessAnswer(_question, rows); return table; } else { SortedMap<Flow, List<Trace>> flowTraces = _batfish.buildFlows(flows, false); TableAnswerElement tableAnswer = new TableAnswerElement(TracerouteAnswerer.metadata(false)); TracerouteAnswerer.flowTracesToRows(flowTraces, question.getMaxTraces()) .forEach(tableAnswer::addRow); return tableAnswer; } }
@Override public Description matchClass(ClassTree classTree, VisitorState state) { // collect all member methods and their indices in the list of members, grouped by name LinkedHashMultimap<OverloadKey, MemberWithIndex> methods = Streams.zip( Stream.iterate(0, i -> i + 1), classTree.getMembers().stream(), MemberWithIndex::create) .filter(m -> m.tree() instanceof MethodTree) .collect( toMultimap( m -> OverloadKey.create((MethodTree) m.tree()), x -> x, LinkedHashMultimap::create)); methods .asMap() .forEach( (key, overloads) -> checkOverloads( state, classTree.getMembers(), key.name(), ImmutableList.copyOf(overloads))); return NO_MATCH; }
private List<ImmutableDimensionModel> extractAllDimensions(List<FormClass> formScope) { Multimap<String,DimensionMapping> dimensionGroups = formScope.stream() .flatMap(this::extractFormDimensions) .collect(Multimaps.toMultimap( dimLabelMappingPair -> dimLabelMappingPair.getFirst(), dimLabelMappingPair -> dimLabelMappingPair.getSecond(), ArrayListMultimap::create)); return dimensionGroups.asMap().entrySet().stream() .map(dimensionGroup -> ImmutableDimensionModel.builder() .id(ResourceId.generateCuid()) .label(dimensionGroup.getKey()) .mappings(dimensionGroup.getValue()) .axis(Axis.COLUMN) .build()) .collect(Collectors.toList()); }
public void testToMultimap() { Collector<Entry<String, Integer>, ?, TreeMultimap<String, Integer>> collector = Multimaps.toMultimap(Entry::getKey, Entry::getValue, TreeMultimap::create); BiPredicate<Multimap<?, ?>, Multimap<?, ?>> equivalence = Equivalence.equals() .onResultOf((Multimap<?, ?> mm) -> ImmutableList.copyOf(mm.asMap().entrySet())) .and(Equivalence.equals()); TreeMultimap<String, Integer> empty = TreeMultimap.create(); TreeMultimap<String, Integer> filled = TreeMultimap.create(); filled.put("a", 1); filled.put("a", 2); filled.put("b", 2); filled.put("c", 3); CollectorTester.of(collector, equivalence) .expectCollects(empty) .expectCollects( filled, mapEntry("a", 1), mapEntry("a", 2), mapEntry("b", 2), mapEntry("c", 3)); }