java.util.function.Function#compose ( )源码实例Demo

下面列出了java.util.function.Function#compose ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

private static void compose2() {
    //Function<Integer, Double> multiplyBy30 = i -> i * 30d;
    Function<Integer, Double> multiplyBy30 = createMultiplyBy(30d);
    System.out.println(multiplyBy30.apply(1)); //prints: 30

    //Function<Double,Double> subtract7 = d-> d - 7.;
    Function<Double,Double> subtract7 = createSubtract(7.0);
    System.out.println(subtract7.apply(10.0));  //prints: 3.0

    Function<Integer, Double> multiplyBy30AndSubtract7 = subtract7.compose(multiplyBy30);
    System.out.println(multiplyBy30AndSubtract7.apply(1)); //prints: 23.0

    multiplyBy30AndSubtract7 = multiplyBy30.andThen(subtract7);
    System.out.println(multiplyBy30AndSubtract7.apply(1)); //prints: 23.0

    Function<Integer, Double> multiplyBy30Subtract7Twice = subtract7.compose(multiplyBy30).andThen(subtract7);
    System.out.println(multiplyBy30Subtract7Twice.apply(1));  //prints: 16

}
 
private static void function(){
    Function<Integer, Double> multiplyByTen = i -> i * 10.0;
    System.out.println(multiplyByTen.apply(1)); //prints: 10.0

    Supplier<Integer> supply7 = () -> 7;
    Function<Integer, Double> multiplyByFive = i -> i * 5.0;
    Consumer<String> printResult = printWithPrefixAndPostfix("Result: ", " Great!");
    printResult.accept(multiplyByFive.apply(supply7.get()).toString()); //prints: Result: 35.0 Great!

    Function<Double, Long> divideByTwo = d -> Double.valueOf(d / 2.).longValue();
    Function<Long, String> incrementAndCreateString = l -> String.valueOf(l + 1);
    Function<Double, String> divideByTwoIncrementAndCreateString = divideByTwo.andThen(incrementAndCreateString);
    printResult.accept(divideByTwoIncrementAndCreateString.apply(4.));     //prints: Result: 3 Great!

    divideByTwoIncrementAndCreateString = incrementAndCreateString.compose(divideByTwo);
    printResult.accept(divideByTwoIncrementAndCreateString.apply(4.));  //prints: Result: 3 Great!

    Function<Double, Double> multiplyByTwo = d -> d * 2.0;
    System.out.println(multiplyByTwo.apply(2.));  //prints: 4.0

    Function<Double, Long> subtract7 = d -> Math.round(d - 7);
    System.out.println(subtract7.apply(11.0));   //prints: 4

    long r = multiplyByTwo.andThen(subtract7).apply(2.);
    System.out.println(r);                          //prints: -3

    multiplyByTwo = Function.identity();
    System.out.println(multiplyByTwo.apply(2.));  //prints: 2.0

    r = multiplyByTwo.andThen(subtract7).apply(2.);
    System.out.println(r);                          //prints: -5
}
 
源代码3 项目: j2objc   文件: FunctionTest.java
public void testCompose_null() throws Exception {
  Function<Double, Double> plusOne = x -> x + 1.0d;
  try {
    plusOne.compose(null);
    fail();
  } catch (NullPointerException expected) {}
}
 
源代码4 项目: Java-Coding-Problems   文件: Main.java
public static void main(String[] args) {

        List<Melon> melons1 = Arrays.asList(new Melon("Gac", 2000),
                new Melon("Horned", 1600), new Melon("Apollo", 3000),
                new Melon("Gac", 3000), new Melon("Hemi", 1600));

        Comparator<Melon> byWeight = Comparator.comparing(Melon::getWeight);
        Comparator<Melon> byType = Comparator.comparing(Melon::getType);

        Comparator<Melon> byWeightAndType = Comparator.comparing(Melon::getWeight)
                .thenComparing(Melon::getType);               

        List<Melon> sortedMelons1 = melons1.stream()
                .sorted(byWeight)               
                .collect(Collectors.toList());

        List<Melon> sortedMelons2 = melons1.stream()
                .sorted(byType)
                .collect(Collectors.toList());

        List<Melon> sortedMelons3 = melons1.stream()
                .sorted(byWeightAndType)
                .collect(Collectors.toList());

        System.out.println("Unsorted melons: " + melons1);
        System.out.println("\nSorted by weight melons: " + sortedMelons1);
        System.out.println("Sorted by type melons: " + sortedMelons2);
        System.out.println("Sorted by weight and type melons: " + sortedMelons3);
        
        List<Melon> melons2 = Arrays.asList(new Melon("Gac", 2000),
                new Melon("Horned", 1600), new Melon("Apollo", 3000),
                new Melon("Gac", 3000), new Melon("hemi", 1600));
        
        Comparator<Melon> byWeightAndType2 = Comparator.comparing(Melon::getWeight)
                .thenComparing(Melon::getType, String.CASE_INSENSITIVE_ORDER);

        List<Melon> sortedMelons4 = melons2.stream()
                .sorted(byWeightAndType2)
                .collect(Collectors.toList());
        
        System.out.println("\nSorted by weight and type (case insensitive) melons: " + sortedMelons4);
        
        Predicate<Melon> p2000 = m -> m.getWeight() > 2000;
        Predicate<Melon> p2000GacApollo = p2000.and(m -> m.getType().equals("Gac"))
                .or(m -> m.getType().equals("Apollo"));
        Predicate<Melon> restOf = p2000GacApollo.negate();
        Predicate<Melon> pNot2000 = Predicate.not(m -> m.getWeight() > 2000);        

        List<Melon> result1 = melons1.stream()
                .filter(p2000GacApollo)
                .collect(Collectors.toList());

        List<Melon> result2 = melons1.stream()
                .filter(restOf)
                .collect(Collectors.toList());
        
        List<Melon> result3 = melons1.stream()
                .filter(pNot2000)
                .collect(Collectors.toList());

        System.out.println("\nAll melons of type Apollo or Gac heavier than 2000 grams:\n" + result1);       
        System.out.println("\nNegation of the above predicate:\n" + result2);
        System.out.println("\nAll melons lighter than (or equal to) 2000 grams:\n" + result3);

        Function<Double, Double> f = x -> x * 2;
        Function<Double, Double> g = x -> Math.pow(x, 2);
        Function<Double, Double> gf = f.andThen(g);
        Function<Double, Double> fg = f.compose(g);
        double resultgf = gf.apply(4d);
        double resultfg = fg.apply(4d);

        System.out.println("\ng(f(x)): " + resultgf);
        System.out.println("f(g(x)): " + resultfg);
                
        Function<String, String> introduction = Editor::addIntroduction;
        Function<String, String> editor = introduction.andThen(Editor::addBody)
                .andThen(Editor::addConclusion);

        String article = editor.apply("\nArticle name\n");

        System.out.println(article);
    }
 
源代码5 项目: arcusplatform   文件: KafkaStream.java
public <K1> Builder<K1, V> deserializeByteKeys(Function<byte[], K1> keyDeserializer) {
   return new Builder<>(keyDeserializer.compose(ByteDeserializer), this.valueDeserializer, this);
}
 
源代码6 项目: arcusplatform   文件: KafkaStream.java
public <K1> Builder<K1, V> deserializeStringKeys(Function<String, K1> keyDeserializer) {
   return new Builder<>(keyDeserializer.compose(StringDeserializer), this.valueDeserializer, this);
}
 
源代码7 项目: arcusplatform   文件: KafkaStream.java
public <K1> Builder<K1, V> transformKeys(Function<K, K1> fn) {
   return new Builder<>(fn.compose(keyDeserializer), valueDeserializer);
}
 
源代码8 项目: arcusplatform   文件: KafkaStream.java
public <V1> Builder<K, V1> deserializeByteValues(Function<byte[], V1> valueDeserializer) {
   return new Builder<>(this.keyDeserializer, valueDeserializer.compose(ByteDeserializer), this);
}
 
源代码9 项目: arcusplatform   文件: KafkaStream.java
public <V1> Builder<K, V1> deserializeStringValues(Function<String, V1> valueDeserializer) {
   return new Builder<>(this.keyDeserializer, valueDeserializer.compose(StringDeserializer), this);
}
 
源代码10 项目: AVM   文件: ClassF.java
public Function<Integer, Integer> getIncrementorLambda() {
    String str = "aaaaaaaaaaaaaa";
    func = (x) -> str.substring(0, x);
    Function<String, Integer> func2 = (inputStr) -> onlyCalledByLambda(inputStr);
    return func2.compose(func);
}
 
private static void compose1() {

        Function<Integer, Double> multiplyBy30 = createMultiplyBy(30d);
        System.out.println(multiplyBy30.apply(1)); //prints: 30

        Function<Double,Double> subtract7 = createSubtract(7.0);
        System.out.println(subtract7.apply(10.0));  //prints: 3.0

        Function<Integer, Double> multiplyBy30AndSubtract7 = subtract7.compose(multiplyBy30);
        System.out.println(multiplyBy30AndSubtract7.apply(1)); //prints: 23.0

        multiplyBy30AndSubtract7 = multiplyBy30.andThen(subtract7);
        System.out.println(multiplyBy30AndSubtract7.apply(1)); //prints: 23.0

        Function<Integer, Double> multiplyBy30Subtract7Twice = subtract7.compose(multiplyBy30).andThen(subtract7);
        System.out.println(multiplyBy30Subtract7Twice.apply(1));  //prints: 16

    }
 
源代码12 项目: archie   文件: OdinSerializer.java
public OdinSerializer(OdinStringBuilder builder, Function<Object, Object> odinObjectMapper) {
    this.builder = builder;
    this.objectMapper = odinObjectMapper.compose(this::checkNotNull);
}
 
源代码13 项目: cyclops   文件: PublisherFlatMappingSpliterator.java
public static <T2,T,R> PublisherFlatMappingSpliterator<T2,R> compose(FunctionSpliterator<T2,T> fnS,Function<? super T, ? extends Publisher<? extends R>> mapper){
    Function<? super T2,? extends T> fn = fnS.function();
    return new PublisherFlatMappingSpliterator<T2,R>(CopyableSpliterator.copy(fnS.source()),mapper.<T2>compose(fn));

}
 
源代码14 项目: cyclops   文件: StreamFlatMappingSpliterator.java
public static <T2,T,R> StreamFlatMappingSpliterator<T2,R> compose(FunctionSpliterator<T2,T> fnS,Function<? super T, ? extends Stream<? extends R>> mapper){
    Function<? super T2,? extends T> fn = fnS.function();
    return new StreamFlatMappingSpliterator<T2,R>(CopyableSpliterator.copy(fnS.source()),mapper.<T2>compose(fn));

}
 
源代码15 项目: cyclops   文件: IterableFlatMappingSpliterator.java
public static <T2,T,R> IterableFlatMappingSpliterator<T2,R> compose(FunctionSpliterator<T2,T> fnS,Function<? super T, ? extends Iterable<? extends R>> mapper){
    Function<? super T2,? extends T> fn = fnS.function();
    return new IterableFlatMappingSpliterator<T2,R>(CopyableSpliterator.copy(fnS.source()),mapper.<T2>compose(fn));

}
 
源代码16 项目: highj   文件: CokleisliProfunctor.java
@Override
default <A, B, C> Cokleisli<W, A, C> rmap(Function<B, C> g, __<__<__<Cokleisli.µ, W>, A>, B> p) {
    return new Cokleisli<>(g.compose(asCokleisli(p)));
}
 
源代码17 项目: tutorials   文件: FunctionalInterfaceUnitTest.java
@Test
public void whenComposingTwoFunctions_thenFunctionsExecuteSequentially() {

    Function<Integer, String> intToString = Object::toString;
    Function<String, String> quote = s -> "'" + s + "'";

    Function<Integer, String> quoteIntToString = quote.compose(intToString);

    assertEquals("'5'", quoteIntToString.apply(5));

}
 
源代码18 项目: ditto   文件: DefaultAdapterResolver.java
/**
 * Convert an extracting function for TopicPath into one for Adaptable.
 *
 * @param extractor the extracting function for TopicPath.
 * @return the extracting function for Adaptable.
 */
private static <T> Function<Adaptable, T> forTopicPath(final Function<TopicPath, T> extractor) {
    return extractor.compose(Adaptable::getTopicPath);
}
 
源代码19 项目: durian   文件: Functions.java
/**
 * Returns the composition of two functions. For {@code f: A->B} and {@code g: B->C}, composition
 * is defined as the function h such that {@code h(a) == g(f(a))} for each {@code a}.
 *
 * @param g the second function to apply
 * @param f the first function to apply
 * @return the composition of {@code f} and {@code g}
 * @see <a href="//en.wikipedia.org/wiki/Function_composition">function composition</a>
 */
public static <A, B, C> Function<A, C> compose(Function<B, C> g, Function<A, ? extends B> f) {
	return g.compose(f);
}