fork download
  1. import com.google.common.collect.*;
  2. import java.util.*;
  3.  
  4. public class Main {
  5.  
  6. public static class Transaction {
  7. public final double amount;
  8. public final String transactionType;
  9. public final String date;
  10.  
  11. public Transaction(double amount, String transactionType, String date) {
  12. this.amount = amount;
  13. this.transactionType = transactionType;
  14. this.date = date;
  15. }
  16. }
  17.  
  18. public static void processTransactions(List<Transaction> transactions) {
  19. // Filter by Credit Transactions
  20. ImmutableList<Transaction> creditTransactions = FluentIterable.from(transactions)
  21. .filter(t -> t.transactionType.equals("Credit"))
  22. .toList();
  23.  
  24. // Group by Date
  25. ImmutableListMultimap<String, Transaction> transactionsByDate = Multimaps.index(creditTransactions, t -> t.date);
  26.  
  27. // Calculate and print the average for each date
  28. for (String date : transactionsByDate.keySet()) {
  29. Collection<Transaction> dateTransactions = transactionsByDate.get(date);
  30. double averageAmount = dateTransactions.stream()
  31. .mapToDouble(t -> t.amount)
  32. .average()
  33. .orElse(0.0);
  34. System.out.printf("%s - %.2f$\n", date, averageAmount);
  35. }
  36. }
  37.  
  38. public static void main(String[] args) {
  39. List<Transaction> transactions = Arrays.asList(
  40. new Transaction(500, "Credit", "2023-05-27"),
  41. new Transaction(1500, "Debit", "2023-04-06"),
  42. new Transaction(1800, "Credit", "2023-08-06"),
  43. new Transaction(250, "Credit", "2023-05-27"),
  44. new Transaction(500, "Debit", "2023-05-27")
  45. );
  46.  
  47. processTransactions(transactions);
  48. }
  49. }
  50.  
Success #stdin #stdout 0.19s 58060KB
stdin
Standard input is empty
stdout
2023-05-27 - 375.00$
2023-08-06 - 1800.00$