powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Задача на сумму транзакций по счету (stream collector)
5 сообщений из 5, страница 1 из 1
Задача на сумму транзакций по счету (stream collector)
    #39697683
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!

Решаю задачки. И вот попалась такая на которой залип.
Исходные данные.
Есть два класса - Счет и Транзакция. (представлены ниже в спойлере)
Есть список транзакций по счетам.

Задача.
Нужно просуммировать сумму транзакций по счетам.


Условие оригинал.
Almost like a SQL: the total sum of transactions by each account.
You have two classes:

Account: number: String, balance: Long
Transaction: uuid: String, sum: Long, account: Account
Both classes have getters for all fields with the corresponding names (getNumber(), getSum(), getAccount() and so on).
Write a collector that calculates the total sum of transactions (long type, not integer) by each account (i.e. by account number). The collector will be applied to a stream of transactions.

Important. You should write only the collector in any valid formats but without ; on the end.
It will be passed as an argument to the collect() method of a stream as shown below.

List<Transaction> transactions = ...
Map<String, Long> totalSumOfTransByEachAccount =
transactions.stream()
.collect( ...your_collector_will_be_passed_here... );

Examples of the valid solution formats: Collectors.reducing(...) or reducing(...)



Main c классами

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
import java.util.Arrays;
import java.util.List;

public class Main {

    static class Account {
        private String number;
        private Long balance;

        public Account(String number, Long balance) {
            this.number = number;
            this.balance = balance;
        }

        public String getNumber() {
            return number;
        }

        public Long getBalance() {
            return balance;
        }
    }

    static class Transaction {
        private String uuid;
        private Long sum;
        private Account account;

        public Transaction(String uuid, Long sum, Account account) {
            this.uuid = uuid;
            this.sum = sum;
        }

        public String getUuid() {
            return uuid;
        }

        public Long getSum() {
            return sum;
        }

        public Account getAccount() {return account; }

    }

    public static void main(String[] args) {
        Account account1 =  new Account("1001", 1000L);
        Account account2 =  new Account("1002", 2000L);

        List<Transaction> transactions = Arrays.asList(
                        new Transaction("774cedda-9cde-4f53-8bc2-5b4d4859772a", 100L, account1),
                        new Transaction("337868a7-f469-43c0-9042-3422ce37ee26a", 200L, account1),
                        new Transaction("f8047f86-89e7-4226-8b75-74c55a4d7e31", 500L, account2)
                );
    }

}





С представленными данными результат должен быть такой:
1001 - 300
1002 - 500

Не силен в стримах.

Понимаю, что reduce в данном случае вроде как не годится. А с Collectors.reducing не получается подружиться.

Пробовал делать через Collectors.groupingBy(), но получал либо "element cannot be mapped to a null key" либо "NullPointerException".

Как же достучаться до Account в Transaction, как это сделать правильно?
...
Рейтинг: 0 / 0
Задача на сумму транзакций по счету (stream collector)
    #39697712
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Imperous....
Пробовал делать через Collectors.groupingBy(), но получал либо "element cannot be mapped to a null key" либо "NullPointerException".
....

Код: java
1.
2.
3.
4.
5.
6.
        private Account account;

        public Transaction(String uuid, Long sum, Account account) {
            this.uuid = uuid;
            this.sum = sum;
        }


А где инициализация this.account в конструкторе?

Под отлатчиком посмотреть не судьба или подумать, от чего может быть "element cannot be mapped to a null key" либо "NullPointerException" ?
...
Рейтинг: 0 / 0
Задача на сумму транзакций по счету (stream collector)
    #39697742
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день ,

Сложно понять что нужно поучить ?

Задача по SQL

а решение должно быть на java ?

ИЗ того что понял groupingby и/или collectingandthen

https://stackoverflow.com/questions/34997501/java-8-stream-groupingby-summing-an-attributevalue


https://www.javabrahman.com/java-8/java-8-how-to-use-collectors-collectingandthen-method-with-examples/

или так?

http://www.mkyong.com/java8/java-8-collectors-groupingby-and-mapping-example/
...
Рейтинг: 0 / 0
Задача на сумму транзакций по счету (stream collector)
    #39697784
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevImperous....
Пробовал делать через Collectors.groupingBy(), но получал либо "element cannot be mapped to a null key" либо "NullPointerException".
....

Код: java
1.
2.
3.
4.
5.
6.
        private Account account;

        public Transaction(String uuid, Long sum, Account account) {
            this.uuid = uuid;
            this.sum = sum;
        }


А где инициализация this.account в конструкторе?

Под отлатчиком посмотреть не судьба или подумать, от чего может быть "element cannot be mapped to a null key" либо "NullPointerException" ?

Спасибо! :)
Да, не сложилось под отладчиком. В конструкторах и методах не сомневался.

Решение приняло.
...
Рейтинг: 0 / 0
Задача на сумму транзакций по счету (stream collector)
    #39697786
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1Добрый день ,

Сложно понять что нужно поучить ?

Задача по SQL

а решение должно быть на java ?

ИЗ того что понял groupingby и/или collectingandthen

https://stackoverflow.com/questions/34997501/java-8-stream-groupingby-summing-an-attributevalue


https://www.javabrahman.com/java-8/java-8-how-to-use-collectors-collectingandthen-method-with-examples/

или так?

http://www.mkyong.com/java8/java-8-collectors-groupingby-and-mapping-example/

Сделал, через grouppingBy.
Мне все время не давала покоя вот эта фраза из условия "Examples of the valid solution formats: Collectors.reducing(...) or reducing(...)". Точней я ее неправильно понял.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Задача на сумму транзакций по счету (stream collector)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]