Advertisement
oneat

nice avarage

Oct 20th, 2017
3,444
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.66 KB | None | 0 0
  1. package com.company.avarages;
  2.  
  3. import java.util.List;
  4. import java.util.function.BinaryOperator;
  5. import java.util.function.UnaryOperator;
  6. import java.util.stream.Collectors;
  7. import java.util.stream.IntStream;
  8.  
  9. public class MainBetter {
  10.     static private final List<Double> nums=IntStream.rangeClosed(100,3000)
  11.             .asDoubleStream()
  12.             .boxed()
  13.             .collect(Collectors.toList());
  14.     interface Post {
  15.         Double sum(Double sum, Double size);
  16.     }
  17.  
  18.     interface Mapper extends UnaryOperator<Double>{}
  19.  
  20.     interface Reducer extends BinaryOperator<Double> {}
  21.  
  22.     static class Summers{
  23.         static Post division=(sum, size)->sum/size;
  24.     }
  25.  
  26.     static class Mappers{
  27.         static Mapper identity=x->x;
  28.     }
  29.  
  30.     static class Reducers{
  31.         static Reducer summer=(a,b)->a+b;
  32.     }
  33.  
  34.     static class Average{
  35.         private final Mapper mapper;
  36.         private final Post post;
  37.         private final Reducer reducer;
  38.  
  39.         public Average(Mapper mapper, Post post, Reducer reducer) {
  40.             this.mapper = mapper;
  41.             this.post = post;
  42.             this.reducer = reducer;
  43.         }
  44.  
  45.         public Double average(List<Double> nums) {
  46.             return post.sum(
  47.                     nums.stream()
  48.                             .map(mapper)
  49.                             .reduce(reducer).get()
  50.                     ,
  51.                     (double)nums.size()
  52.             );
  53.         }
  54.     }
  55.     public static void main(String[] args) {
  56.         System.out.print(
  57.                 new Average(Mappers.identity, Summers.division, Reducers.summer)
  58.                         .average(nums)
  59.         );
  60.     }
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement