-
Notifications
You must be signed in to change notification settings - Fork 0
/
Tax.java
67 lines (56 loc) · 1.99 KB
/
Tax.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
58
59
60
61
62
63
64
65
66
67
import java.util.ArrayList;
import java.util.List;
import java.util.stream.IntStream;
public class Tax {
private final List<TaxSlab> newTax = new ArrayList<>();
private final List<TaxSlab> oldTax = new ArrayList<>();
public Tax() {
newTax.add(new TaxSlab(850, 0.32));
newTax.add(new TaxSlab(750, 0.28));
newTax.add(new TaxSlab(650, 0.24));
newTax.add(new TaxSlab(550, 0.2));
newTax.add(new TaxSlab(450, 0.16));
newTax.add(new TaxSlab(350, 0.12));
newTax.add(new TaxSlab(250, 0.08));
newTax.add(new TaxSlab(150, 0.04));
oldTax.add(new TaxSlab(750, 0.18));
oldTax.add(new TaxSlab(500, 0.12));
oldTax.add(new TaxSlab(250, 0.06));
}
public static void main(String[] args) {
Tax tax = new Tax();
IntStream.iterate(50000, i -> i <= 3000000, i -> i + 50000).forEach(i -> {
String s = i + ", " + tax.getOldTax(i) + ", " + tax.getNewTax(i);
System.out.println(s);
});
}
public int getOldTax(int salary) {
return getTax(salary, oldTax);
}
public int getNewTax(int salary) {
return getTax(salary, newTax);
}
private int getTax(int amount, List<TaxSlab> slabs) {
double tax = 0;
int runningSalary = amount;
for (TaxSlab slab : slabs) {
if (runningSalary > slab.minAmount) {
tax += (runningSalary - slab.minAmount) * slab.taxPercent;
runningSalary = slab.minAmount;
}
}
return (int) tax;
}
static class TaxSlab implements Comparable<TaxSlab> {
private final int minAmount;
private final double taxPercent;
public TaxSlab(int minAmountInThousands, double taxPercent) {
this.minAmount = minAmountInThousands * 1000;
this.taxPercent = taxPercent;
}
@Override
public int compareTo(TaxSlab o) {
return Integer.compare(o.minAmount, minAmount);
}
}
}