| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Guided hands-on exercises for the Java learning path on Amigoscode Academy.
| Branch | Description |
|---|---|
| main | Base setup |
| exercises | All exercises with TODOs |
| solutions | Completed solutions |
git checkout exercisesgit checkout solutionsJava 25 is required. This project will not compile with older Java versions. Make sure you have Java 25 installed before starting.
You can check your Java version with:
java -versionThe exercises follow the Java roadmap in this recommended order:
| # | Package | Course(s) | Exercises |
|---|---|---|---|
| 1 | beginners | Java For Beginners | 69 |
| 2 | developers | Java For Developers | 130 |
| 3 | oop | Object Oriented Programming | 95 |
| 4 | datastructures | Data Structures | 99 |
| 5 | generics | Generics | 70 |
| 6 | functionalinterfaces | Functional Interfaces | 76 |
| 7 | streams | Streams Essentials + Java Streams | 152 |
| 8 | testing | Unit Testing Essentials + Unit Testing + Mockito | 126 |
| Total | 11 courses | 817 |
| # | File | TODOs | Topic |
|---|---|---|---|
| 01 | beginners/thebasics/Variables.java | 7 | Variable declaration and data types |
| 02 | beginners/thebasics/TypeCasting.java | 6 | Implicit/explicit casting and type conversion |
| 03 | beginners/thebasics/Operators.java | 7 | Arithmetic, comparison, logical, and ternary operators |
| 04 | beginners/thebasics/StringExercises.java | 8 | String methods (length, substring, split, equals) |
| 05 | beginners/thebasics/ArrayExercises.java | 7 | Array declaration, access, iteration, and summing |
| 06 | beginners/thebasics/ConditionalStatements.java | 7 | if/else, switch statements, switch expressions |
| 07 | beginners/thebasics/LoopExercises.java | 8 | for, while, do-while, enhanced for, nested loops |
| 08 | beginners/thebasics/MethodExercises.java | 7 | Method creation, return types, overloading |
| 09 | beginners/thebasics/ScannerExercises.java | 6 | Reading user input with Scanner |
| 10 | beginners/thebasics/MiniProject.java | 6 | Simple calculator combining all concepts |
| # | File | TODOs | Topic |
|---|---|---|---|
| 01 | developers/loops/LoopExercises.java | 7 | Nested loops, break/continue, patterns |
| 02 | developers/conditionals/IfStatements.java | 6 | Ternary, complex conditions, switch expressions |
| 03 | developers/packages/PackageDemo.java | 5 | Imports, static imports, fully qualified names |
| 04 | developers/accessmodifiers/AccessModifiers.java | 6 | public, private, protected, default |
| 05 | developers/accessmodifiers/AccessDemo.java | 5 | Accessing modifiers from another class |
| 06 | developers/methods/MethodOverloading.java | 7 | Method overloading with different parameters |
| 07 | developers/methods/VarArgs.java | 6 | Variable-length arguments |
| 08 | developers/strings/StringMethods.java | 8 | equals, compareTo, contains, replace, split |
| 09 | developers/strings/StringBuilderExercises.java | 6 | StringBuilder operations |
| 10 | developers/dates/DateExercises.java | 7 | LocalDate, LocalDateTime, formatting, parsing |
| 11 | developers/bigdecimal/BigDecimalExercises.java | 6 | BigDecimal arithmetic and comparisons |
| 12 | developers/userinput/UserInputExercises.java | 6 | Scanner with validation |
| 13 | developers/exceptions/TryCatch.java | 7 | try-catch-finally, multi-catch, try-with-resources |
| 14 | developers/exceptions/CustomException.java | 6 | Custom checked and unchecked exceptions |
| 15 | developers/files/FileReading.java | 6 | Reading files with Files and BufferedReader |
| 16 | developers/files/FileWriting.java | 6 | Writing files with Files and BufferedWriter |
| 17 | developers/classes/ClassesAndObjects.java | 7 | Classes, constructors, toString, equals |
| 18 | developers/classes/EnumExercises.java | 6 | Enums with fields, constructors, methods |
| 19 | developers/staticmembers/StaticExercises.java | 6 | Static fields, methods, factory methods |
| 20 | developers/nullhandling/OptionalExercises.java | 7 | Optional.of, ofNullable, map, flatMap |
| # | File | TODOs | Topic |
|---|---|---|---|
| 01 | oop/encapsulation/BankAccount.java | 7 | Private fields, getters/setters, validation |
| 02 | oop/encapsulation/ImmutablePerson.java | 6 | Immutable class with final fields |
| 03 | oop/inheritance/Animal.java | 5 | Base class with fields and methods |
| 04 | oop/inheritance/Dog.java | 6 | Extending, super(), overriding methods |
| 05 | oop/inheritance/Vehicle.java | 5 | Base class for vehicle hierarchy |
| 06 | oop/inheritance/ElectricCar.java | 6 | Extending, constructor chaining, override |
| 07 | oop/abstractclasses/Shape.java | 5 | Abstract class and abstract methods |
| 08 | oop/abstractclasses/Circle.java | 5 | Implementing abstract methods |
| 09 | oop/abstractclasses/Rectangle.java | 5 | Implementing abstract methods |
| 10 | oop/abstractclasses/Employee.java | 7 | Abstract hierarchy with polymorphism |
| 11 | oop/polymorphism/PaymentProcessor.java | 7 | Interface, multiple implementations |
| 12 | oop/polymorphism/ShapeCalculator.java | 6 | Polymorphic methods, instanceof |
| 13 | oop/dependencyinjection/NotificationService.java | 7 | Constructor injection pattern |
| 14 | oop/dependencyinjection/OrderProcessor.java | 6 | Depend on abstractions |
| 15 | oop/solid/SolidExercises.java | 8 | All 5 SOLID principles |
| # | File | TODOs | Topic |
|---|---|---|---|
| 01 | datastructures/arrays/ArrayBasics.java | 7 | Create, fill, search, sort arrays |
| 02 | datastructures/arrays/TwoDArrays.java | 6 | 2D array traversal (matrix) |
| 03 | datastructures/arraylist/ArrayListBasics.java | 7 | Add, remove, contains, iterate |
| 04 | datastructures/arraylist/ArrayListOperations.java | 7 | Sort, reverse, max, subList, toArray |
| 05 | datastructures/stacks/StackExercises.java | 7 | Push, pop, peek, balanced brackets |
| 06 | datastructures/queues/QueueExercises.java | 7 | Queue, PriorityQueue operations |
| 07 | datastructures/linkedlists/LinkedListExercises.java | 7 | addFirst, addLast, Iterator |
| 08 | datastructures/linkedlists/LinkedListVsArrayList.java | 5 | Performance comparison |
| 09 | datastructures/sets/HashSetExercises.java | 7 | Add, contains, remove duplicates |
| 10 | datastructures/sets/TreeSetExercises.java | 6 | Sorted set, subSet, headSet |
| 11 | datastructures/maps/HashMapExercises.java | 8 | put, get, containsKey, iterate |
| 12 | datastructures/maps/HashMapWordCount.java | 6 | Word frequency counter |
| 13 | datastructures/maps/TreeMapExercises.java | 6 | Sorted map operations |
| 14 | datastructures/maps/MapAdvanced.java | 6 | computeIfAbsent, merge, Map.of |
| 15 | datastructures/challenge/DataStructureChallenge.java | 7 | Mini project with multiple structures |
| # | File | TODOs | Topic |
|---|---|---|---|
| 01 | generics/classcastexception/ClassCastProblem.java | 5 | Why generics are needed |
| 02 | generics/typeparameters/TypeParameterBasics.java | 6 | Generic class Container<T> |
| 03 | generics/genericclasses/Box.java | 6 | Generic Box<T> class |
| 04 | generics/genericclasses/Pair.java | 7 | Two type parameters Pair<K,V> |
| 05 | generics/genericmethods/GenericMethods.java | 7 | Generic static methods |
| 06 | generics/genericmethods/GenericSwap.java | 5 | Generic swap and reverse |
| 07 | generics/boundedtypes/UpperBound.java | 7 | <T extends Number> |
| 08 | generics/boundedtypes/MultipleBounds.java | 5 | Multiple type bounds |
| 09 | generics/wildcards/UnboundedWildcard.java | 5 | List<?> |
| 10 | generics/wildcards/UpperBoundedWildcard.java | 6 | <? extends Number> |
| 11 | generics/wildcards/LowerBoundedWildcard.java | 6 | <? super Integer> |
| 12 | generics/typeerasure/TypeErasureDemo.java | 5 | Type erasure behavior |
| # | File | TODOs | Topic |
|---|---|---|---|
| 01 | functionalinterfaces/gettingstarted/FunctionalInterfaceBasics.java | 6 | @FunctionalInterface and lambdas |
| 02 | functionalinterfaces/gettingstarted/LambdaExpressions.java | 7 | Lambda syntax and usage |
| 03 | functionalinterfaces/gettingstarted/MethodReferences.java | 6 | Static, instance, constructor refs |
| 04 | functionalinterfaces/functionalinterfaces/FunctionExercise.java | 7 | Function, andThen, compose |
| 05 | functionalinterfaces/functionalinterfaces/BiFunctionExercise.java | 5 | BiFunction |
| 06 | functionalinterfaces/functionalinterfaces/ConsumerExercise.java | 7 | Consumer, BiConsumer |
| 07 | functionalinterfaces/functionalinterfaces/PredicateExercise.java | 7 | Predicate, and/or/negate |
| 08 | functionalinterfaces/functionalinterfaces/SupplierExercise.java | 6 | Supplier for lazy creation |
| 09 | functionalinterfaces/extending/ExtendingInterfaces.java | 6 | Extending functional interfaces |
| 10 | functionalinterfaces/extending/CombinatorPattern.java | 7 | Validation combinator pattern |
| 11 | functionalinterfaces/callbacks/CallbackExercise.java | 6 | Callback pattern with Consumer |
| 12 | functionalinterfaces/callbacks/EventProcessor.java | 6 | Event-driven processing |
| # | File | TODOs | Topic |
|---|---|---|---|
| 01 | streams/basics/CreatingStreams.java | 6 | Stream.of, Arrays.stream, generate |
| 02 | streams/basics/FilterBasics.java | 6 | Filtering lists |
| 03 | streams/basics/MapBasics.java | 6 | Mapping/transforming elements |
| 04 | streams/basics/ForEachAndCollect.java | 6 | forEach, collect to List/Set |
| 05 | streams/basics/ReduceBasics.java | 6 | Reduce operations |
| 06 | streams/intstreams/IntStreamBasics.java | 6 | IntStream.range, sum, average |
| 07 | streams/intstreams/IntStreamIterate.java | 5 | IntStream.iterate, LongStream |
| 08 | streams/minmax/MinMax.java | 6 | Finding min/max with Comparator |
| 09 | streams/duplicates/DistinctExercise.java | 6 | distinct(), collect to Set |
| 10 | streams/filtering/FilterExercise.java | 7 | Complex filter conditions |
| 11 | streams/filtering/TakeWhileDropWhile.java | 6 | takeWhile, dropWhile |
| 12 | streams/filtering/FindAndMatch.java | 7 | findFirst, anyMatch, allMatch |
| 13 | streams/transformations/MapExercise.java | 6 | Map objects to different types |
| 14 | streams/transformations/FlatMapExercise.java | 7 | Flatten nested structures |
| 15 | streams/transformations/ReduceExercise.java | 6 | Custom reduce operations |
| 16 | streams/statistics/CountMinMax.java | 6 | count, min, max on objects |
| 17 | streams/statistics/AverageAndSum.java | 6 | mapToInt, average, sum |
| 18 | streams/statistics/SummaryStatistics.java | 5 | IntSummaryStatistics |
| 19 | streams/statistics/GroupingBy.java | 7 | Collectors.groupingBy |
| 20 | streams/statistics/GroupingAndCounting.java | 6 | groupingBy + counting |
| 21 | streams/sorting/SortingExercise.java | 7 | sorted() with Comparator |
| 22 | streams/joiningstrings/JoiningExercise.java | 5 | Collectors.joining |
| 23 | streams/collectors/CollectorsExercise.java | 7 | toMap, partitioningBy, teeing |
| 24 | streams/understanding/LazyStreams.java | 5 | Lazy evaluation, short-circuiting |
| 25 | streams/challenge/StreamsChallenge.java | 8 | Full pipeline challenge |
Source classes (in src/main/java):
| File | Description |
|---|---|
| testing/firsttest/Calculator.java | Calculator (add, subtract, multiply, divide) |
| testing/assertions/StringUtils.java | String utilities (palindrome, reverse, capitalize) |
| testing/scenarios/GradeCalculator.java | Grade calculator (score to letter grade) |
| testing/assertj/Person.java | Person class for AssertJ exercises |
| testing/parameterized/EmailValidator.java | Email validation |
| testing/exceptions/BankAccount.java | Bank account with exception handling |
| testing/tdd/PasswordValidator.java | Empty - implement via TDD |
| testing/tdd/ShippingCostCalculator.java | Empty - implement via TDD |
| testing/mocking/*.java | Interfaces and classes for mocking exercises |
Test classes (in src/test/java):
| # | File | TODOs | Topic |
|---|---|---|---|
| 01 | testing/firsttest/CalculatorTest.java | 7 | First unit test, assertEquals |
| 02 | testing/assertions/StringUtilsTest.java | 7 | assertTrue, assertFalse, assertAll |
| 03 | testing/assertions/AssertThrowsTest.java | 6 | assertThrows, exception messages |
| 04 | testing/scenarios/GradeCalculatorTest.java | 8 | Test scenarios and boundaries |
| 05 | testing/junitfeatures/JunitFeaturesTest.java | 8 | BeforeEach, Nested, Repeated, Tags |
| 06 | testing/assertj/PersonTest.java | 8 | AssertJ fluent assertions |
| 07 | testing/parameterized/EmailValidatorTest.java | 6 | @ParameterizedTest, @ValueSource |
| 08 | testing/parameterized/CsvSourceTest.java | 5 | @CsvSource, @CsvFileSource |
| 09 | testing/exceptions/BankAccountTest.java | 7 | assertThatThrownBy |
| 10 | testing/tdd/PasswordValidatorTest.java | 8 | TDD - write tests first |
| 11 | testing/tdd/ShippingCostCalculatorTest.java | 6 | TDD exercise |
| 12 | testing/mocking/FirstMockTest.java | 6 | @Mock, when/thenReturn, verify |
| 13 | testing/mocking/MatchersTest.java | 6 | any(), argThat(), eq() |
| 14 | testing/mocking/VerifyInteractionsTest.java | 7 | verifyNoInteractions, times, never |
| 15 | testing/mocking/ArgumentCaptorTest.java | 6 | ArgumentCaptor, @Captor |
| 16 | testing/mocking/BDDMockitoTest.java | 6 | given/willReturn, then/should |
| 17 | testing/mocking/AdvancedMockingTest.java | 7 | Answer, InOrder, spy, timeout |
| 18 | testing/mocking/ClockMockingTest.java | 6 | Mock Clock for time-dependent logic |
| 19 | testing/mocking/ProductServiceTest.java | 7 | Full mocking exercise |
Join the Amigoscode Academy to get help, share your progress, and connect with other learners.
| Back | FazBrowse Home | New Git URL |