Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ch.claude_martin;
- import java.security.SecureRandom;
- import java.time.LocalDate;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import java.util.Map.Entry;
- import java.util.Random;
- import java.util.stream.Collectors;
- public class SomeClass {
- /** This is the data bean. It's a plain old java object. */
- public static class Bike {
- private String modelName;
- private LocalDate purchaseDate;
- private String contact;
- private int price;
- public String getModelName() {
- return modelName;
- }
- public void setModelName(String modelName) {
- this.modelName = modelName;
- }
- public LocalDate getPurchaseDate() {
- return purchaseDate;
- }
- public void setPurchaseDate(LocalDate purchaseDate) {
- this.purchaseDate = purchaseDate;
- }
- public String getContact() {
- return contact;
- }
- public void setContact(String contact) {
- this.contact = contact;
- }
- public int getPrice() {
- return price;
- }
- public void setPrice(int price) {
- this.price = price;
- }
- @Override
- public String toString() {
- return String.format("Bike(%s, %s, %d, %s)", modelName, purchaseDate, price, contact);
- }
- }
- /**
- * This is just a simple pair, but Java doesn't have a type for this. You could
- * use Map.Entry for this. For a group over 3 fields you need a three-tuple
- * instead.
- */
- public static class Pair<A, B> {
- private A a;
- private B b;
- public Pair(A a, B b) {
- super();
- this.a = a;
- this.b = b;
- }
- @Override
- public int hashCode() {
- return a.hashCode() + b.hashCode() * 31;
- }
- @Override
- public boolean equals(Object obj) {
- if (this == obj)
- return true;
- if (obj == null || getClass() != obj.getClass())
- return false;
- Pair other = (Pair) obj;
- return this.a.equals(other.a) && this.b.equals(other.b);
- }
- @Override
- public String toString() {
- return String.format("Group(%s, %s)", a, b);
- }
- }
- public static void main(String[] args) {
- final List<Bike> bikes = new ArrayList<>();
- final List<String> contacts = List.of("Bob", "Jill", "Jack", "Susie", "Burt", "Emma");
- final Random rng = new SecureRandom();
- for (int month = 1; month < 13; month++) {
- for (int day = 1; day < 29; day++) {
- for (int i = 0; i < rng.nextInt(4); i++) {
- for (String contact : contacts) {
- Bike b = new Bike();
- b.setContact(contact);
- b.setPurchaseDate(LocalDate.of(2018, month, day));
- b.setPrice(rng.nextInt(5000) + 500);
- b.setModelName(Long.toString(Math.abs(rng.nextLong() % 3656158440062976L), 36));
- bikes.add(b);
- }
- }
- }
- }
- System.out.println("Database is ready");
- Map<Pair<String, LocalDate>, List<Bike>> groups = bikes.stream()
- .collect(Collectors.groupingBy(b -> new Pair<>(b.getContact(), b.getPurchaseDate())));
- for (Entry<Pair<String, LocalDate>, List<Bike>> entry : groups.entrySet()) {
- System.out.println("=====");
- System.out.print(entry.getKey());
- System.out.print(": ");
- System.out.println(entry.getValue());
- }
- System.out.println("=====");
- System.out.println("THE END");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement