Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.company.avarages;
- import java.util.List;
- import java.util.function.BinaryOperator;
- import java.util.function.UnaryOperator;
- import java.util.stream.Collectors;
- import java.util.stream.IntStream;
- public class MainBetter {
- static private final List<Double> nums=IntStream.rangeClosed(100,3000)
- .asDoubleStream()
- .boxed()
- .collect(Collectors.toList());
- interface Post {
- Double sum(Double sum, Double size);
- }
- interface Mapper extends UnaryOperator<Double>{}
- interface Reducer extends BinaryOperator<Double> {}
- static class Summers{
- static Post division=(sum, size)->sum/size;
- }
- static class Mappers{
- static Mapper identity=x->x;
- }
- static class Reducers{
- static Reducer summer=(a,b)->a+b;
- }
- static class Average{
- private final Mapper mapper;
- private final Post post;
- private final Reducer reducer;
- public Average(Mapper mapper, Post post, Reducer reducer) {
- this.mapper = mapper;
- this.post = post;
- this.reducer = reducer;
- }
- public Double average(List<Double> nums) {
- return post.sum(
- nums.stream()
- .map(mapper)
- .reduce(reducer).get()
- ,
- (double)nums.size()
- );
- }
- }
- public static void main(String[] args) {
- System.out.print(
- new Average(Mappers.identity, Summers.division, Reducers.summer)
- .average(nums)
- );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement