fork download
  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3. import java.util.Comparator;
  4. import java.util.List;
  5.  
  6. class Tariff {
  7. private String name;
  8. protected double subscriptionFee;
  9.  
  10. public Tariff(String name, double subscriptionFee) {
  11. this.name = name;
  12. this.subscriptionFee = subscriptionFee;
  13. }
  14.  
  15. public String getName() {
  16. return name;
  17. }
  18.  
  19. public double getSubscriptionFee() {
  20. return subscriptionFee;
  21. }
  22.  
  23. public int getTotalSubscribers() {
  24. return 0;
  25. }
  26. }
  27. class PrepaidTariff extends Tariff {
  28. private int subscribers;
  29.  
  30. public PrepaidTariff(String name, double subscriptionFee, int subscribers) {
  31. super(name, subscriptionFee);
  32. this.subscribers = subscribers;
  33. }
  34.  
  35. public int getTotalSubscribers() {
  36. return subscribers;
  37. }
  38. }
  39. class PostpaidTariff extends Tariff {
  40. private int subscribers;
  41.  
  42. public PostpaidTariff(String name, double subscriptionFee, int subscribers) {
  43. super(name, subscriptionFee);
  44. this.subscribers = subscribers;
  45. }
  46.  
  47. public int getTotalSubscribers() {
  48. return subscribers;
  49. }
  50. }
  51. class MobileCompany {
  52. private ArrayList<Tariff> tariffs;
  53.  
  54. public MobileCompany() {
  55. tariffs = new ArrayList<>();
  56. }
  57.  
  58. public void addTariff(Tariff tariff) {
  59. tariffs.add(tariff);
  60. }
  61.  
  62. public int getTotalSubscribers() {
  63. int totalSubscribers = 0;
  64. for (Tariff tariff : tariffs) {
  65. totalSubscribers += tariff.getTotalSubscribers();
  66. }
  67. return totalSubscribers;
  68. }
  69. public ArrayList<Tariff> sortTariffsByMonthlyFee() {
  70. ArrayList<Tariff> sortedTariffs = new ArrayList<>(tariffs);
  71. Collections.sort(sortedTariffs, Comparator.comparingDouble(Tariff::getSubscriptionFee));
  72. return sortedTariffs;
  73. }
  74. public Tariff findTariffByMonthlyFeeRange(double minFee, double maxFee) {
  75. return tariffs.stream()
  76. .filter(t -> t.getSubscriptionFee() >= minFee && t.getSubscriptionFee() <= maxFee)
  77. .findFirst().orElse(null);
  78. }
  79. }
  80. public class Main {
  81. public static void main(String[] args) {
  82. MobileCompany company = new MobileCompany();
  83.  
  84. company.addTariff(new PrepaidTariff("Standard", 1000.0, 15000));
  85. company.addTariff(new PostpaidTariff("Premium", 3000.0, 8000));
  86. company.addTariff(new PostpaidTariff("Business", 5000.0, 6800));
  87.  
  88. System.out.println("Общее число клиентов в компании: " + company.getTotalSubscribers());
  89.  
  90. ArrayList<Tariff> sortedTariffs = company.sortTariffsByMonthlyFee();
  91. System.out.println("\nТарифы компании, отсортированные по размеру абонентской платы:");
  92. for (Tariff tariff : sortedTariffs) {
  93. System.out.println("Тариф: " + tariff.getName());
  94. System.out.println("Абонентская плата: " + tariff.getSubscriptionFee());
  95. }
  96. double minFee = 1000.0;
  97. double maxFee = 5000.0;
  98. Tariff foundTariff = company.findTariffByMonthlyFeeRange(minFee, maxFee);
  99. if (foundTariff != null) {
  100. System.out.println("\nТариф в компании с абонентской платой от " + minFee + " до " + maxFee);
  101. } else {
  102. System.out.println("\nНет тарифа в компании с абонентской платой от " + minFee + " до " + maxFee);
  103. }
  104. }
  105. }
Success #stdin #stdout 0.23s 58672KB
stdin
Standard input is empty
stdout
Общее число клиентов в компании: 29800

Тарифы компании, отсортированные по размеру абонентской платы:
Тариф: Standard
Абонентская плата: 1000.0
Тариф: Premium
Абонентская плата: 3000.0
Тариф: Business
Абонентская плата: 5000.0

Тариф в компании с абонентской платой от 1000.0 до 5000.0