Skip to content

Latest commit

 

History

History
248 lines (192 loc) · 8.59 KB

File metadata and controls

248 lines (192 loc) · 8.59 KB

Java Problems Analysis - Comprehensive Notes

Overview

This document analyzes all Java problems and solutions found in the codebase, categorized by topic and complexity level.

Problem Categories Analysis

1. Java Streams API Problems

Location: org.mjtech.stream.CollectList

Easy Level Problems (16 problems)

  1. Group Strings by Length - CollectList:34-36

    • Uses Collectors.groupingBy(String::length)
    • Pattern: Basic grouping with method reference
  2. Find Duplicate Cities - CollectList:42-48

    • Uses groupingBy + counting + filter
    • Pattern: Count-based filtering for duplicates
  3. Reverse All Strings - CollectList:54-57

    • Uses StringBuilder.reverse()
    • Pattern: String manipulation in streams
  4. Sum of Even Numbers - CollectList:64-67

    • Uses filter + mapToInt + sum
    • Pattern: Numeric filtering and aggregation
  5. Convert to Uppercase - CollectList:74-76

    • Uses map(String::toUpperCase)
    • Pattern: Simple transformation
  6. Find Maximum Number - CollectList:83-85

    • Uses max(Comparator.comparing())
    • Pattern: Aggregation with comparator
  7. Count Strings Starting with 'A' - CollectList:92-94

    • Uses filter + count
    • Pattern: Counting with predicate
  8. Filter and Sort Above Threshold - CollectList:102-105

    • Uses filter + sorted
    • Pattern: Multi-step filtering and sorting
  9. Character Frequency Count - CollectList:112-116

    • Uses chars() + groupingBy + counting
    • Pattern: Character-level analysis
  10. Find Distinct Elements - CollectList:123

    • Uses distinct()
    • Pattern: Deduplication
  11. Calculate Average - CollectList:131-133

    • Uses mapToInt + average
    • Pattern: Numeric aggregation
  12. Check All Numbers Positive - CollectList:141

    • Uses allMatch
    • Pattern: Universal quantification
  13. Check Any Number Negative - CollectList:149

    • Uses anyMatch
    • Pattern: Existential quantification
  14. Check None Are Even - CollectList:157

    • Uses noneMatch
    • Pattern: Negative quantification
  15. Check All Numbers Even - CollectList:165

    • Uses allMatch with modulo
    • Pattern: Property verification
  16. Get First N Elements - CollectList:173

    • Uses limit
    • Pattern: Result limiting

Medium Level Problems (10 problems)

  1. Average Salary by Department - CollectList:201-203

    • Uses groupingBy + averagingDouble
    • Pattern: Grouping with aggregation
  2. Top N Highest Paid Employees - CollectList:211-214

    • Uses sorted + limit
    • Pattern: Ranking and limiting
  3. Department with Highest Total Salary - CollectList:222-226

    • Uses groupingBy + summingDouble + max
    • Pattern: Group aggregation with comparison
  4. Partition Employees by Age - CollectList:234-247

    • Uses partitioningBy
    • Pattern: Binary classification
  5. Find Duplicate Salaries - CollectList:252-258

    • Uses groupingBy + counting + filtering
    • Pattern: Duplicate detection in numeric data
  6. Word Length Analysis - CollectList:268-272

    • Uses groupingBy(String::length) + counting
    • Pattern: Text analysis and statistics
  7. Longest Word per Sentence - CollectList:282-290

    • Uses max(Comparator.comparingInt(String::length))
    • Pattern: Maximum finding with custom comparison
  8. Find Palindromes - CollectList:297-300

    • Uses filter with StringBuilder.reverse()
    • Pattern: Complex string validation
  9. Second Largest Element - CollectList:310-318

    • Uses distinct + sorted + skip + findFirst
    • Pattern: Nth element finding
  10. String Compression - CollectList:325-367

    • Uses IntStream.range with complex logic
    • Pattern: Advanced string manipulation

Hard Level Problems (2 problems)

  1. Multi-level Grouping Analysis - CollectList:383-389

    • Complex grouping and filtering with HashSet.containsAll
    • Pattern: Set operations with streams
  2. Moving Average Calculation - CollectList:400-402

    • Uses IntStream.range + skip + limit
    • Pattern: Sliding window operations

2. String Manipulation Problems

Location: org.mjtech.string.StringFreq, org.mjtech.pcl.JavaQA

String Frequency Analysis

  1. Character Frequency Count - StringFreq:5-32

    • Manual loop-based approach
    • Pattern: Traditional iteration with counting
  2. Number-based String Expansion - StringFreq:34-65

    • Complex parsing of character-number patterns
    • Pattern: String parsing and reconstruction
  3. Stream-based Character Frequency - JavaQA:24-35

    • Uses chars() + groupingBy + counting
    • Pattern: Modern stream approach for frequency analysis
  4. Traditional HashMap Frequency - JavaQA:10-22

    • Manual HashMap with getOrDefault
    • Pattern: Traditional frequency counting

3. Object-Oriented Programming Problems

Location: org.mjtech.bnp

Employee Data Processing

  1. Method Overloading - CoreJavaQA:13-29

    • Demonstrates method overloading with different parameter types
    • Pattern: Polymorphism and type resolution
  2. Employee Salary Analysis - CoreJavaQA:32-51

    • Department-wise salary aggregation
    • Age-based filtering
    • Salary sorting
    • Pattern: Business logic with streams
  3. Singleton Pattern - SingleTonSource:1-24

    • Eager initialization singleton
    • Pattern: Design pattern implementation

4. Array and Collection Problems

Location: org.mjtech.number.NumberSort, org.mjtech.tvs.Problem

Number Manipulation

  1. Digit Sorting in Numbers - NumberSort:7-28

    • Converts number to char array and sorts
    • Pattern: Number-to-string-to-array conversion
  2. Duplicate Separation - Problem:23-80

    • Two approaches: HashMap-based (O(n)) and nested loop (O(n²))
    • Pattern: Efficiency comparison and optimization

5. Top N Selection Problems

Location: org.mjtech.incedo.Problem

  1. Top 3 Technologies by Score - Problem:24
    • Uses entrySet().stream() + sorted + limit + map + joining
    • Pattern: Map processing with ranking

Key Patterns and Concepts

Stream API Patterns

  1. Filtering: filter(predicate)
  2. Mapping: map(function), mapToInt(), mapToDouble()
  3. Collecting: collect(Collectors.toList()), collect(Collectors.groupingBy())
  4. Aggregating: sum(), average(), count(), max(), min()
  5. Sorting: sorted(), sorted(comparator)
  6. Limiting: limit(n), skip(n)
  7. Matching: allMatch(), anyMatch(), noneMatch()
  8. Grouping: groupingBy(), partitioningBy()
  9. Advanced Collecting: summingDouble(), averagingDouble(), counting()

Data Structures Used

  1. Lists: ArrayList, LinkedList operations
  2. Maps: HashMap for frequency counting and grouping
  3. Sets: HashSet for duplicate detection
  4. Records: Modern Java data classes (Employee, Transaction)
  5. Traditional Classes: POJO with getters/setters

Algorithm Techniques

  1. Two-pointer technique: String compression
  2. Sliding window: Moving averages
  3. Frequency counting: Character and element analysis
  4. Sorting algorithms: Built-in sort with custom comparators
  5. Set operations: Union, intersection for complex filtering

Performance Considerations

  1. O(n) vs O(n²): HashMap approach vs nested loops
  2. Stream efficiency: Parallel streams consideration
  3. Memory usage: StringBuilder vs String concatenation
  4. Lazy evaluation: Stream operations are lazy until terminal operation

Problem Difficulty Levels

Easy (Beginner)

  • Basic stream operations
  • Simple filtering and mapping
  • Direct aggregations
  • Single-step transformations

Medium (Intermediate)

  • Multi-step stream chains
  • Complex grouping operations
  • Custom comparators
  • String processing with multiple operations

Hard (Advanced)

  • Multi-level grouping and filtering
  • Complex business logic implementation
  • Performance optimization considerations
  • Advanced stream patterns

Testing and Validation

  • Most problems include main methods with sample data
  • Output verification through console printing
  • Edge case handling (null checks, empty collections)
  • Multiple solution approaches for comparison

Best Practices Demonstrated

  1. Method references: String::length, Employee::getSalary
  2. Lambda expressions: (x, y) -> x.compareTo(y)
  3. Null safety: Null checks before processing
  4. Immutability: Using records and final variables
  5. Separation of concerns: Utility methods for complex operations
  6. Code readability: Clear variable names and method structures