как использовать Java 8 для длинных определений функций? - PullRequest
0 голосов
/ 09 мая 2019

У меня есть объект Product,

и код, указанный ниже, hashSetProducts - это LinkedHashSet of Products. Как я могу написать все ниже, используя функцию потока Java 8? Я понимаю, что стоимость ремианинга будет заменяться каждый раз. Я хочу получить окончательное значение после выхода из цикла.

        int getRemaining(int remaining){
         for(Product P : hashSetProducts){
              remaining = calculate(p.qty(), p.price(), remaining, location); // 
                     use Java 8 stream here
         }   

         return remaining
    }

   private int calculate(int qty, double price, int rem, Location location){
         if(rem== 0){
             return 0;
         }
         int avail = location.get(qty, rem);
         if(avail > 0){
           rem = avail - rem;
         }
        return rem;
    }

1 Ответ

0 голосов
/ 09 мая 2019

mapToLong выполнит произвольный код, который возвращает long.Вот MCVE, который использует ваш расчет дословно:

import java.util.LinkedHashSet;

public class HelloWorld{

    public static class Product {
        private int qty;
        private double price;
        private int used;

        public Product(int qty, double price, int used) {
            this.qty = qty;
            this.price =price;
            this.used = used;
        }
        public int qty() {return qty;}
        public double price() {return price;}
        public int used() {return used;}
    };

    public static class Location {
        public long get(int qty, int used) { return 0; };
    };

    public static void main(String []args) {

        LinkedHashSet<Product> hashSetProducts = new LinkedHashSet();

        hashSetProducts.add(new Product(1,1.0,1));
        hashSetProducts.add(new Product(2,2.0,2));
        hashSetProducts.add(new Product(3,3.0,3));

        Location location = new Location();

        long remaining = hashSetProducts.stream().mapToLong(p -> {
            int qty = p.qty();
            int used = p.used();

            if( used == 0 )
                return 0;

            long rem = location.get(qty, used);

            if( qty > 0)
                rem = used - rem;

            return rem;
        }).sum();

        System.out.println(remaining);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...