From c14dc55f07c5bdfadff679ab9f31891b122f7f3c Mon Sep 17 00:00:00 2001 From: Vishwas Kanchan Vaidya Date: Tue, 3 Feb 2026 19:22:03 +0530 Subject: [PATCH] feat: added Java Assignment Solutions (streams, optionals, records, sealed types) --- .../vishwas/Q1_NotificationService.java | 40 ++++++++++++++++ .../vishwas/Q2_StringValidator.java | 26 +++++++++++ Solutions/assignment/vishwas/Q3_Stream.java | 28 +++++++++++ .../assignment/vishwas/Q4_Predicates.java | 19 ++++++++ Solutions/assignment/vishwas/Q5_Optional.java | 28 +++++++++++ Solutions/assignment/vishwas/Q6_Records.java | 19 ++++++++ .../assignment/vishwas/Q7_PaymentSystem.java | 46 +++++++++++++++++++ .../assignment/vishwas/Q8_TextBlocks.java | 21 +++++++++ 8 files changed, 227 insertions(+) create mode 100644 Solutions/assignment/vishwas/Q1_NotificationService.java create mode 100644 Solutions/assignment/vishwas/Q2_StringValidator.java create mode 100644 Solutions/assignment/vishwas/Q3_Stream.java create mode 100644 Solutions/assignment/vishwas/Q4_Predicates.java create mode 100644 Solutions/assignment/vishwas/Q5_Optional.java create mode 100644 Solutions/assignment/vishwas/Q6_Records.java create mode 100644 Solutions/assignment/vishwas/Q7_PaymentSystem.java create mode 100644 Solutions/assignment/vishwas/Q8_TextBlocks.java diff --git a/Solutions/assignment/vishwas/Q1_NotificationService.java b/Solutions/assignment/vishwas/Q1_NotificationService.java new file mode 100644 index 0000000..8fc19a9 --- /dev/null +++ b/Solutions/assignment/vishwas/Q1_NotificationService.java @@ -0,0 +1,40 @@ +package assignment.vishwas; + +public class Q1_NotificationService { + + interface NotificationService{ + void send(String message); + + default void sendWithRetry(String message,int retries){ // Used for Backward Compatibility + if(retries<0){ + throw new IllegalArgumentException("Retry count cannot be negative."); + } + for(int attempt=1;attempt<=retries+1;attempt++){ // First Attempt + Additional attempts after failure + try { + send(message); + System.out.println("Message sent on attempt: " + attempt); + return; + } + catch (Exception e) { + if(attempt>retries){ + throw new RuntimeException("Failed sending message."); + } + } + + } + } + } + + public static void main(String[] args) { + NotificationService notificationService = new NotificationService() { + @Override + public void send(String message) { + if(message==null){ + throw new RuntimeException("Message cannot be null."); + } + System.out.println("Sending message: " + message); + } + }; + notificationService.sendWithRetry("Hello Cloudsufi!",3); + } +} diff --git a/Solutions/assignment/vishwas/Q2_StringValidator.java b/Solutions/assignment/vishwas/Q2_StringValidator.java new file mode 100644 index 0000000..9a7c99d --- /dev/null +++ b/Solutions/assignment/vishwas/Q2_StringValidator.java @@ -0,0 +1,26 @@ +package assignment.vishwas; + +public class Q2_StringValidator { + @FunctionalInterface + public interface stringValidator { + boolean isValid(String str); + } + public static boolean validate(String str, stringValidator validator) { // Utility Method + return validator.isValid(str); + } + + public static void main(String[] args) { + String test = "Hello Cloudsufi!"; + + boolean isNonEmpty = validate(test,s->s!=null && !s.isEmpty()); + System.out.println("Is String Non-Empty?: " + isNonEmpty); + + boolean isLengthGreaterThan5 = validate(test,s->s!=null && s.length()>5); + System.out.println("Is String Length Greater than 5?: " + isLengthGreaterThan5); + + boolean isStartingWithCapitalLetter = validate(test,s->s!=null && !s.isEmpty() && Character.isUpperCase(s.charAt(0))); + System.out.println("Is String starting with a Capital Letter?: " + isStartingWithCapitalLetter); + + + } +} diff --git a/Solutions/assignment/vishwas/Q3_Stream.java b/Solutions/assignment/vishwas/Q3_Stream.java new file mode 100644 index 0000000..9278f0e --- /dev/null +++ b/Solutions/assignment/vishwas/Q3_Stream.java @@ -0,0 +1,28 @@ +package assignment.vishwas; +import java.util.List; + +public class Q3_Stream { + static class User { + String name; + int age; + public User(String name,int age){ + this.name=name; + this.age=age; + } + } + + static void main(String[] args) { + List users = List.of( + new User("Vishwas",22), + new User("Aakash",21), + new User("Himani",23) + ); + + List filteredAndSorted = users.stream() + .filter(user->user.age>18) + .map(user -> user.name.toUpperCase()) + .sorted() + .toList(); + System.out.println(filteredAndSorted); + } +} diff --git a/Solutions/assignment/vishwas/Q4_Predicates.java b/Solutions/assignment/vishwas/Q4_Predicates.java new file mode 100644 index 0000000..233b06f --- /dev/null +++ b/Solutions/assignment/vishwas/Q4_Predicates.java @@ -0,0 +1,19 @@ +package assignment.vishwas; +import java.util.Arrays; +import java.util.List; +import java.util.function.Predicate; + +public class Q4_Predicates { + static void main(String[] args) { + List numbers = Arrays.asList(-5, -2, 0, 1, 2, 3, 4, 6, 9); + + Predicate isPositive = n -> n > 0; + Predicate isEven = n -> n%2 == 0; + + Predicate isPositiveAndEven = isPositive.and(isEven); + + numbers.stream() + .filter(isPositiveAndEven) + .forEach(System.out::println); + } +} diff --git a/Solutions/assignment/vishwas/Q5_Optional.java b/Solutions/assignment/vishwas/Q5_Optional.java new file mode 100644 index 0000000..4b68ce1 --- /dev/null +++ b/Solutions/assignment/vishwas/Q5_Optional.java @@ -0,0 +1,28 @@ +package assignment.vishwas; + +import java.util.Optional; + +public class Q5_Optional { + record User(String username, boolean isActive) {} + + static Optional findUser(String id) { + if("101".equals(id)){ + return Optional.of(new User("vishwas",true)); + } else if ("102".equals(id)) { + return Optional.of(new User("keshav",false)); + } + else return Optional.empty(); + } + static void userProcessor(String id){ + findUser(id) + .filter(User::isActive) + .map(User::username) + .ifPresentOrElse(System.out::println,()-> System.out.println("User not found")); + + } + static void main(String[] args) { + userProcessor("101"); + userProcessor("102"); + userProcessor("104"); + } +} diff --git a/Solutions/assignment/vishwas/Q6_Records.java b/Solutions/assignment/vishwas/Q6_Records.java new file mode 100644 index 0000000..6c8d6eb --- /dev/null +++ b/Solutions/assignment/vishwas/Q6_Records.java @@ -0,0 +1,19 @@ +package assignment.vishwas; + +public class Q6_Records { + record Employee(Integer id, Integer salary){ + public Employee{ + if(salary<0){ + throw new IllegalArgumentException("Salary must be greater than zero"); + } + } + public boolean isHigherEarner(){ + return salary>100000; + } + } + + static void main(String[] args) { + Employee emp = new Employee(1035, 50000); + System.out.println(emp.salary()); + } +} diff --git a/Solutions/assignment/vishwas/Q7_PaymentSystem.java b/Solutions/assignment/vishwas/Q7_PaymentSystem.java new file mode 100644 index 0000000..99265f3 --- /dev/null +++ b/Solutions/assignment/vishwas/Q7_PaymentSystem.java @@ -0,0 +1,46 @@ +package assignment.vishwas; + +public class Q7_PaymentSystem { + sealed interface Payment permits CardPayment, UpiPayment{ + } + + static final class CardPayment implements Payment{ + private final String cardNumber; + + CardPayment(String cardNumber){ + this.cardNumber=cardNumber; + } + + String getCardNumber(){ + return cardNumber; + } + } + static final class UpiPayment implements Payment{ + private final String upiId; + + UpiPayment(String upiId){ + this.upiId=upiId; + } + + String getUpiId(){ + return upiId; + } + } + + static void process(Payment pmt){ + if(pmt instanceof CardPayment card){ + System.out.println("Processing Card Payment for card no.: "+card.getCardNumber()); + } + else if(pmt instanceof UpiPayment upi){ + System.out.println("Processing UPI Payment for UPI ID: "+upi.getUpiId()); + } + else{ + throw new IllegalStateException("Invalid Payment Type"); + } + } + + static void main(String[] args) { + process(new CardPayment("1234-5678-9101-3476")); + process(new UpiPayment("9876776541@upi")); + } +} diff --git a/Solutions/assignment/vishwas/Q8_TextBlocks.java b/Solutions/assignment/vishwas/Q8_TextBlocks.java new file mode 100644 index 0000000..4842cf7 --- /dev/null +++ b/Solutions/assignment/vishwas/Q8_TextBlocks.java @@ -0,0 +1,21 @@ +package assignment.vishwas; + +public class Q8_TextBlocks { + public static void main(String[] args) { + String userId = "U3012"; + + String query = """ + Select + id, + username, + email, + status + FROM users + WHERE id='%s' + AND status = 'ACTIVE' + ORDER BY username + """.formatted(userId); + + System.out.println(query); + } +}