Task - Collections - Sorting Collections and Loose Coupling #50
Replies: 33 comments
|
|
|
|
|
|
|
|
|
|
import java.util.ArrayList; interface Client { } abstract class ServiceClient implements Client, Comparable { } class Customer extends ServiceClient { } class Business extends ServiceClient { } public class MyCompany { } |
|
|
|
|
|
|
|
|
|
|
|
import java.util.ArrayList; |
|
import java.text.ParseException; interface Client extends Comparable { } abstract class Clients implements Client { } class Customer extends Clients { } class Business extends Clients { } public class SortingCollections { } |
|
`package collections; import java.text.ParseException; interface Client { } abstract class Service implements Client, Comparable { } class Customer extends Service { } class Business extends Service { } public class SortingChallenge { }` |
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
interface Client {
double getCharges();
double calculatePayment(GregorianCalendar invoiceDate);
void sendEmail(double payment);
}
class Clients implements Client, Comparable<Clients> {
protected int id;
protected String name;
protected String email;
protected double charges;
GregorianCalendar dateOfAgreement;
public Clients(int id, String name, String email, double charges) {
this.id = id;
this.name = name;
this.email = email;
this.charges = charges;
this.dateOfAgreement = new GregorianCalendar();
}
public int getId() {
return id;
}
public GregorianCalendar getDateOfAgreement() {
return dateOfAgreement;
}
@Override
public int compareTo(Clients o) {
return this.id - o.getId();
}
@Override
public double getCharges() {
return this.charges;
}
@Override
public double calculatePayment(GregorianCalendar invoiceDate) {
return findServicableDays(invoiceDate.getTime(), this.dateOfAgreement.getTime()) * charges;
}
@Override
public void sendEmail(double payment) {
System.out.println("Email sent with pending payment :" + payment);
}
protected long findServicableDays(Date d1, Date d2) {
return (d1.getTime() - d2.getTime()) / (1000 * 3600 * 24);
}
}
class Customer extends Clients {
public Customer(int id, String name, String email, double charges) {
super(id, name, email, charges);
}
@Override
public String toString() {
return "Customer [charges=" + charges + ", dateOfAgreement=" + dateOfAgreement.getTime() + ", email=" + email
+ ", id="
+ id + ", name=" + name + "]";
}
}
class Business extends Clients {
private final double GST_RATE = 18;
public Business(int id, String name, String email, double charges) {
super(id, name, email, charges);
}
@Override
public double calculatePayment(GregorianCalendar invoiceDate) {
double payment = findServicableDays(invoiceDate.getTime(), this.dateOfAgreement.getTime()) * charges;
return payment + payment * .18;
}
public double getGst() {
return this.GST_RATE;
}
@Override
public String toString() {
return "Business [GST_RATE=" + GST_RATE + ", charges=" + charges + ", dateOfAgreement="
+ dateOfAgreement.getTime()
+ ", email=" + email + ", id=" + id + ", name=" + name + "]";
}
}
public class MyCompany {
public static void main(String[] args) {
Clients c1 = new Customer(101, "Gaurav", "xyz@email.com", 200);
Clients c2 = new Customer(103, "Rohit", "xyz@email.com", 300);
Clients b1 = new Business(102, "Google", "xyz@email.com", 2000);
Clients b2 = new Business(104, "Amazon", "xyz@email.com", 3000);
List<Clients> list = new ArrayList<>();
list.add(b1);
list.add(b2);
list.add(c1);
list.add(c2);
list.forEach(System.out::println);
List<Double> pendingPayments = new ArrayList<>();
list.forEach(ele -> pendingPayments.add(ele.calculatePayment(new GregorianCalendar(2022, 2, 31))));
pendingPayments.forEach(System.out::println);
for (int i = 0; i < list.size(); i++) {
list.get(i).sendEmail(pendingPayments.get(i));
}
Collections.sort(list);
list.forEach(System.out::println);
Collections.sort(list, (a, b) -> (int) (a.getCharges() - b.getCharges()));
list.forEach(System.out::println);
Collections.sort(list,
(a, b) -> (int) (a.dateOfAgreement.getTimeInMillis() - b.dateOfAgreement.getTimeInMillis()));
list.forEach(System.out::println);
}
} |
import java.util.*;
public class D50 {
public static void main(String[] args) {
// task 1
ServiceClient c1 = new Customer1(3, "James", "jk@gmail.com", 1000, new GregorianCalendar(2022, 2, 7));
ServiceClient c2 = new Customer1(2, "Adam", "as@gmail.com", 1000, new GregorianCalendar(2022, 2, 8));
// task 2
ServiceClient c3 = new Business(1, "Marie", "er@gmail.com", 2000, new GregorianCalendar(2022, 2, 9));
ServiceClient c4 = new Business(5, "Nick", "nb@gmail.com", 2000, new GregorianCalendar(2022, 2, 10));
// task 3
List<ServiceClient> clients = new ArrayList<>();
clients.add(c1);
clients.add(c2);
clients.add(c3);
clients.add(c4);
// task 4
double[] pendingPayments = new double[4];
for (int i = 0; i < 4; i++) {
pendingPayments[i] = clients.get(i).calculatePayment(new GregorianCalendar(2022, 2, 30));
}
System.out.println(Arrays.toString(pendingPayments));
// task 5
for (int i = 0; i < 4; i++) {
clients.get(i).sendEmail(pendingPayments[i]);
}
System.out.println();
// task 6
System.out.println("Sort According to Id");
Collections.sort(clients);
clients.forEach(System.out::println);
System.out.println();
// task 7
System.out.println("Sort According to charges");
clients.sort((ServiceClient o1, ServiceClient o2) -> (int) (o2.getCharges() - o1.getCharges()));
clients.forEach(System.out::println);
System.out.println();
// task 8
System.out.println("Sort According to date of Agreement");
clients.sort((ServiceClient o1,
ServiceClient o2) -> (o1.dateOfAgreement.get(Calendar.DATE) - o2.dateOfAgreement.get(Calendar.DATE)));
clients.forEach(System.out::println);
}
}
interface Client {
double getCharges();
double calculatePayment(GregorianCalendar invoiceDate);
void sendEmail(double payment);
}
abstract class ServiceClient implements Client, Comparable<ServiceClient> {
int id;
String name;
String email;
double charges;
GregorianCalendar dateOfAgreement;
public int compareTo(ServiceClient other) {
return this.id - other.id;
}
public double getCharges() {
return charges;
}
public double calculate(GregorianCalendar invoiceDate) {
int date = invoiceDate.get(Calendar.DATE);
int agreementDate = dateOfAgreement.get(Calendar.DATE);
return (date - agreementDate) * getCharges();
}
public void sendEmail(double payment) {
System.out.println("Pending Payment: " + payment);
}
}
class Customer1 extends ServiceClient {
public Customer1(int id, String name, String email, double charges, GregorianCalendar dateOfAgreement) {
this.id = id;
this.name = name;
this.email = email;
this.charges = charges;
this.dateOfAgreement = dateOfAgreement;
}
@Override
public String toString() {
return "Customer [charges=" + charges + ", dateOfAgreement=" + dateOfAgreement.get(Calendar.DATE) + ", email="
+ email + ", id="
+ id + ", name=" + name + "]";
}
@Override
public double calculatePayment(GregorianCalendar invoiceDate) {
return calculate(invoiceDate);
}
}
class Business extends ServiceClient {
double gstRate = 12;
public Business(int id, String name, String email, double charges, GregorianCalendar dateOfAgreement) {
this.id = id;
this.name = name;
this.email = email;
this.charges = charges;
this.dateOfAgreement = dateOfAgreement;
}
@Override
public double calculatePayment(GregorianCalendar invoiceDate) {
return calculate(invoiceDate) * getGST();
}
double getGST() {
return gstRate;
}
@Override
public String toString() {
return "Business [charges=" + charges + ", dateOfAgreement=" + dateOfAgreement.get(Calendar.DATE) + ", email="
+ email
+ ", gstRate=" + gstRate + ", id=" + id + ", name=" + name + "]";
}
} |
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
interface Client {
double getCharges();
double calculatePayment(GregorianCalendar invoiceDate);
void sendEmail(double payment);
}
class Clients implements Client, Comparable<Clients> {
protected int id;
protected String name;
protected String email;
protected double charges;
GregorianCalendar dateOfAgreement;
public Clients(int id, String name, String email, double charges) {
this.id = id;
this.name = name;
this.email = email;
this.charges = charges;
this.dateOfAgreement = new GregorianCalendar();
}
public int getId() {
return id;
}
public GregorianCalendar getDateOfAgreement() {
return dateOfAgreement;
}
@Override
public int compareTo(Clients o) {
return this.id - o.getId();
}
@Override
public double getCharges() {
return this.charges;
}
@Override
public double calculatePayment(GregorianCalendar invoiceDate) {
return findServicableDays(invoiceDate.getTime(), this.dateOfAgreement.getTime()) * charges;
}
@Override
public void sendEmail(double payment) {
System.out.println("Email sent with pending payment :" + payment);
}
protected long findServicableDays(Date d1, Date d2) {
return (d1.getTime() - d2.getTime()) / (1000 * 3600 * 24);
}
}
class Customer extends Clients {
public Customer(int id, String name, String email, double charges) {
super(id, name, email, charges);
}
@Override
public String toString() {
return "Customer [charges=" + charges + ", dateOfAgreement=" + dateOfAgreement.getTime() + ", email=" + email
+ ", id="
+ id + ", name=" + name + "]";
}
}
class Business extends Clients {
private final double GST_RATE = 18;
public Business(int id, String name, String email, double charges) {
super(id, name, email, charges);
}
@Override
public double calculatePayment(GregorianCalendar invoiceDate) {
double payment = findServicableDays(invoiceDate.getTime(), this.dateOfAgreement.getTime()) * charges;
return payment + payment * .18;
}
public double getGst() {
return this.GST_RATE;
}
@Override
public String toString() {
return "Business [GST_RATE=" + GST_RATE + ", charges=" + charges + ", dateOfAgreement="
+ dateOfAgreement.getTime()
+ ", email=" + email + ", id=" + id + ", name=" + name + "]";
}
}
public class MyCompany {
public static void main(String[] args) {
Clients c1 = new Customer(101, "Gaurav", "xyz@email.com", 200);
Clients c2 = new Customer(103, "Rohit", "xyz@email.com", 300);
Clients b1 = new Business(102, "Google", "xyz@email.com", 2000);
Clients b2 = new Business(104, "Amazon", "xyz@email.com", 3000);
List<Clients> list = new ArrayList<>();
list.add(b1);
list.add(b2);
list.add(c1);
list.add(c2);
list.forEach(System.out::println);
List<Double> pendingPayments = new ArrayList<>();
list.forEach(ele -> pendingPayments.add(ele.calculatePayment(new GregorianCalendar(2022, 2, 31))));
pendingPayments.forEach(System.out::println);
for (int i = 0; i < list.size(); i++) {
list.get(i).sendEmail(pendingPayments.get(i));
}
Collections.sort(list);
list.forEach(System.out::println);
Collections.sort(list, (a, b) -> (int) (a.getCharges() - b.getCharges()));
list.forEach(System.out::println);
Collections.sort(list,
(a, b) -> (int) (a.dateOfAgreement.getTimeInMillis() - b.dateOfAgreement.getTimeInMillis()));
list.forEach(System.out::println);
}
} |
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
interface Client {
double getCharges();
double calculatePayment(GregorianCalendar invoiceDate);
void sendEmail(double payment);
}
class Clients implements Client, Comparable<Clients> {
protected int id;
protected String name;
protected String email;
protected double charges;
GregorianCalendar dateOfAgreement;
public Clients(int id, String name, String email, double charges) {
this.id = id;
this.name = name;
this.email = email;
this.charges = charges;
this.dateOfAgreement = new GregorianCalendar();
}
public int getId() {
return id;
}
public GregorianCalendar getDateOfAgreement() {
return dateOfAgreement;
}
@Override
public int compareTo(Clients o) {
return this.id - o.getId();
}
@Override
public double getCharges() {
return this.charges;
}
@Override
public double calculatePayment(GregorianCalendar invoiceDate) {
return findServicableDays(invoiceDate.getTime(), this.dateOfAgreement.getTime()) * charges;
}
@Override
public void sendEmail(double payment) {
System.out.println("Email sent with pending payment :" + payment);
}
protected long findServicableDays(Date d1, Date d2) {
return (d1.getTime() - d2.getTime()) / (1000 * 3600 * 24);
}
}
class Customer extends Clients {
public Customer(int id, String name, String email, double charges) {
super(id, name, email, charges);
}
@Override
public String toString() {
return "Customer [charges=" + charges + ", dateOfAgreement=" + dateOfAgreement.getTime() + ", email=" + email
+ ", id="
+ id + ", name=" + name + "]";
}
}
class Business extends Clients {
private final double GST_RATE = 18;
public Business(int id, String name, String email, double charges) {
super(id, name, email, charges);
}
@Override
public double calculatePayment(GregorianCalendar invoiceDate) {
double payment = findServicableDays(invoiceDate.getTime(), this.dateOfAgreement.getTime()) * charges;
return payment + payment * .18;
}
public double getGst() {
return this.GST_RATE;
}
@Override
public String toString() {
return "Business [GST_RATE=" + GST_RATE + ", charges=" + charges + ", dateOfAgreement="
+ dateOfAgreement.getTime()
+ ", email=" + email + ", id=" + id + ", name=" + name + "]";
}
}
public class d50 {
public static void main(String[] args) {
Clients c1 = new Customer(101, "Gaurav", "xyz@email.com", 200);
Clients c2 = new Customer(103, "Rohit", "xyz@email.com", 300);
Clients b1 = new Business(102, "Google", "xyz@email.com", 2000);
Clients b2 = new Business(104, "Amazon", "xyz@email.com", 3000);
List<Clients> list = new ArrayList<>();
list.add(b1);
list.add(b2);
list.add(c1);
list.add(c2);
list.forEach(System.out::println);
List<Double> pendingPayments = new ArrayList<>();
list.forEach(ele -> pendingPayments.add(ele.calculatePayment(new GregorianCalendar(2022, 2, 31))));
pendingPayments.forEach(System.out::println);
for (int i = 0; i < list.size(); i++) {
list.get(i).sendEmail(pendingPayments.get(i));
}
Collections.sort(list);
list.forEach(System.out::println);
Collections.sort(list, (a, b) -> (int) (a.getCharges() - b.getCharges()));
list.forEach(System.out::println);
Collections.sort(list,
(a, b) -> (int) (a.dateOfAgreement.getTimeInMillis() - b.dateOfAgreement.getTimeInMillis()));
list.forEach(System.out::println);
}
} |
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
interface Client {
double getCharges();
double calculatePayment(GregorianCalendar invoiceDate);
void sendEmail(double payment);
}
class Clients implements Client, Comparable<Clients> {
protected int id;
protected String name;
protected String email;
protected double charges;
GregorianCalendar dateOfAgreement;
public Clients(int id, String name, String email, double charges) {
this.id = id;
this.name = name;
this.email = email;
this.charges = charges;
this.dateOfAgreement = new GregorianCalendar();
}
public int getId() {
return id;
}
public GregorianCalendar getDateOfAgreement() {
return dateOfAgreement;
}
@Override
public int compareTo(Clients o) {
return this.id - o.getId();
}
@Override
public double getCharges() {
return this.charges;
}
@Override
public double calculatePayment(GregorianCalendar invoiceDate) {
return findServicableDays(invoiceDate.getTime(), this.dateOfAgreement.getTime()) * charges;
}
@Override
public void sendEmail(double payment) {
System.out.println("Email sent with pending payment :" + payment);
}
protected long findServicableDays(Date d1, Date d2) {
return (d1.getTime() - d2.getTime()) / (1000 * 3600 * 24);
}
}
class Customer extends Clients {
public Customer(int id, String name, String email, double charges) {
super(id, name, email, charges);
}
@Override
public String toString() {
return "Customer [charges=" + charges + ", dateOfAgreement=" + dateOfAgreement.getTime() + ", email=" + email
+ ", id="
+ id + ", name=" + name + "]";
}
}
class Business extends Clients {
private final double GST_RATE = 18;
public Business(int id, String name, String email, double charges) {
super(id, name, email, charges);
}
@Override
public double calculatePayment(GregorianCalendar invoiceDate) {
double payment = findServicableDays(invoiceDate.getTime(), this.dateOfAgreement.getTime()) * charges;
return payment + payment * .21;
}
public double getGst() {
return this.GST_RATE;
}
@Override
public String toString() {
return "Business [GST_RATE=" + GST_RATE + ", charges=" + charges + ", dateOfAgreement="
+ dateOfAgreement.getTime()
+ ", email=" + email + ", id=" + id + ", name=" + name + "]";
}
}
public class MyCompany {
public static void main(String[] args) {
Clients c1 = new Customer(101, "Gaurav", "xyz@email.com", 200);
Clients c2 = new Customer(103, "Pankaj", "xyz@email.com", 300);
Clients b1 = new Business(102, "Facebook", "xyz@email.com", 2000);
Clients b2 = new Business(104, "Instagram", "xyz@email.com", 3000);
List<Clients> list = new ArrayList<>();
list.add(b1);
list.add(b2);
list.add(c1);
list.add(c2);
list.forEach(System.out::println);
List<Double> pendingPayments = new ArrayList<>();
list.forEach(ele -> pendingPayments.add(ele.calculatePayment(new GregorianCalendar(2019, 5, 15))));
pendingPayments.forEach(System.out::println);
for (int i = 0; i < list.size(); i++) {
list.get(i).sendEmail(pendingPayments.get(i));
}
Collections.sort(list);
list.forEach(System.out::println);
Collections.sort(list, (a, b) -> (int) (a.getCharges() - b.getCharges()));
list.forEach(System.out::println);
Collections.sort(list,
(a, b) -> (int) (a.dateOfAgreement.getTimeInMillis() - b.dateOfAgreement.getTimeInMillis()));
list.forEach(System.out::println);
}
} |
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collections;
import java.util.GregorianCalendar;
import java.util.List;
interface Client {
double getCharges();
double calculatePayment(GregorianCalendar invoiceDate);
void sendEmail(double payment);
}
abstract class ServiceClient implements Client, Comparable<ServiceClient> {
int id;
String name;
String email;
double charges;
GregorianCalendar dateOfAgreement;
public int compareTo (ServiceClient other) {
return this.id - other.id;
}
public double getCharges() {
return charges;
}
public double calculate(GregorianCalendar invoiceDate) {
int date = invoiceDate.get(Calendar.DATE);
int agreementDate = dateOfAgreement.get(Calendar.DATE);
return(date-agreementDate)*getCharges();
}
public void sendEmail(double payment) {
System.out.println("Pending Payment: " +payment);
}
}
class Customer extends ServiceClient {
public Customer(int id,String name,String email,double charges,GregorianCalendar dateOfAgreement){
this.id = id;
this.name = name;
this.email = email;
this.charges = charges;
this.dateOfAgreement = dateOfAgreement;
}
@Override
public String toString() {
return "Customer [charges=" + charges +",dateOfAgreement" + dateOfAgreement.get(Calendar.DATE) + ",email="+ email +", id=" + id +",name=" + name +"]";
}
@Override
public double calculatePayment(GregorianCalendar invoiceDate){
return calculate(invoiceDate);
}
}
class Business extends ServiceClient {
double gstRate = 12;
public Business(int id,String name,String email,double charges,GregorianCalendar dateOfAgreement){
this.id = id;
this.name = name;
this.email = email;
this.charges = charges;
this.dateOfAgreement = dateOfAgreement;
}
@Override
public double calculatePayment(GregorianCalendar invoiceDate) {
return calculate(invoiceDate) * getGST();
}
double getGST(){
return gstRate * calculate(new GregorianCalendar(2022,3,31))
}
@Override
public String toString() {
return "Business [gstRate=" + gstRate +", name=" + name +", email=" + email +", charges=" + charges +", dateOfAgreement=" +dateOfAgreement.get(Calendar.DATE) +"]";
}
}
public class MyCompany {
public static void main(String[] args) {
ServiceClient c1 = new Customer(10,"Kiran","k@gmail.com",1000, new GregorianCalendar(2022,3,8));
ServiceClient c2 = new Customer(5,"Kiya","ki@gmail.com",2000, new GregorianCalendar(2022,3,9));
ServiceClient c3 = new Customer(2,"Rohan","r@gmail.com",2000, new GregorianCalendar(2022,3,10));
ServiceClient c4 = new Customer(12,"Sag","s@gmail.com",3000, new GregorianCalendar(2022,3,11));
List<ServiceClient> clients = new ArrayList<>(Arrays.asList(c1, c2, c3, c4));
double[] pendingPayments = new double[4];
for (int i = 0; i < 4; i++) {
pendingPayments[i] = clients.get(i).calculatePayment(new GregorianCalendar(2022,3,30));
}
System.out.println(Arrays.toString(pendingPayments));
for(int i = 0; i<4; i++){
clients.get(i).sendEmail(pendingPayments[i]);
}
System.out.println("Sort According to Id");
Collections.sort(clients);
clients.forEach(System.out::println);
System.out.println("Sort According to charges");
clients.sort((ServiceClient o1, ServiceClient o2)-> (int) (o2.getCharges()-o1.getCharges()));
clients.forEach(System.out::println);
System.out.println("Sort According to date of Agreement");
clients.sort((ServiceClient o1, ServiceClient o2)-> (o1.dateOfAgreement.get(Calendar.DATE)-o2.dateOfAgreement.get(Calendar.DATE)));
clients.forEach(System.out::println);
}
} |
|
@akash-coded |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Create an interface called Client which will have:
double getCharges()double calculatePayment(invoiceDate): calculates the receivable amount by multiplying charges with no. of serviceable daysvoid sendEmail(double payment): sends an email to the client with the pending amountCreate a class Customer which implements the interface Client and declares the following:
idnameemailchargesdateOfAgreementCreate a class Business which implements the interface Client and declares the following:
idnameemailchargesgstRatedateOfAgreementdouble getGST()In the driver class MyCompany :
pendingPayments. Display the array.pendingPaymentsarray to send emails to all the clientsid(natural order) in ascending order and print it.chargesin descending order and print itdateOfAgreementin ascending order and print itAll reactions