gitextract_r1nqldzq/ ├── .github/ │ ├── FUNDING.yml │ └── workflows/ │ ├── maven.yml │ └── projectActions.yml ├── .gitignore ├── .mvn/ │ └── wrapper/ │ ├── MavenWrapperDownloader.java │ ├── maven-wrapper.jar │ └── maven-wrapper.properties ├── 0-0-intro/ │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── com/ │ │ └── bobocode/ │ │ └── intro/ │ │ └── ExerciseIntroduction.java │ └── test/ │ └── java/ │ └── com/ │ └── bobocode/ │ └── intro/ │ └── ExerciseIntroductionTest.java ├── 1-0-java-basics/ │ ├── 1-3-0-hello-generics/ │ │ ├── README.MD │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── bobocode/ │ │ │ └── basics/ │ │ │ ├── Box.java │ │ │ └── BoxDemoApp.java │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── bobocode/ │ │ └── basics/ │ │ └── BoxTest.java │ ├── 1-3-1-crazy-generics/ │ │ ├── README.MD │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── bobocode/ │ │ │ └── basics/ │ │ │ ├── CrazyGenerics.java │ │ │ └── util/ │ │ │ └── BaseEntity.java │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── bobocode/ │ │ └── basics/ │ │ └── CrazyGenericsTest.java │ ├── 1-3-2-heterogeneous-max-holder/ │ │ ├── README.MD │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── bobocode/ │ │ │ └── basics/ │ │ │ └── HeterogeneousMaxHolder.java │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── bobocode/ │ │ └── basics/ │ │ └── HeterogeneousMaxHolderTest.java │ ├── 1-5-0-hello-annotations/ │ │ ├── README.MD │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── bobocode/ │ │ │ └── basics/ │ │ │ ├── HelloAnnotationsExercise.java │ │ │ └── Level.java │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── bobocode/ │ │ └── basics/ │ │ └── HelloAnnotationsExerciseTest.java │ ├── README.md │ └── pom.xml ├── 2-0-data-structures-and-algorithms/ │ ├── 2-2-1-node/ │ │ ├── README.MD │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── bobobode/ │ │ │ └── cs/ │ │ │ ├── Node.java │ │ │ └── Nodes.java │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── bobocode/ │ │ └── cs/ │ │ └── NodesTest.java │ ├── 2-2-2-stack/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── bobocode/ │ │ │ └── cs/ │ │ │ ├── LinkedStack.java │ │ │ ├── Stack.java │ │ │ └── exception/ │ │ │ └── EmptyStackException.java │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── bobocode/ │ │ └── cs/ │ │ └── LinkedStackTest.java │ ├── 2-2-3-linked-queue/ │ │ ├── README.MD │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── bobocode/ │ │ │ └── cs/ │ │ │ ├── LinkedQueue.java │ │ │ └── Queue.java │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── bobocode/ │ │ └── cs/ │ │ └── LinkedQueueTest.java │ ├── 2-2-4-linked-list/ │ │ ├── README.MD │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── bobocode/ │ │ │ └── cs/ │ │ │ └── LinkedList.java │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── bobocode/ │ │ └── cs/ │ │ └── LinkedListTest.java │ ├── 2-2-5-array-list/ │ │ ├── README.MD │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── bobocode/ │ │ │ └── cs/ │ │ │ └── ArrayList.java │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── bobocode/ │ │ └── cs/ │ │ └── ArrayListTest.java │ ├── 2-2-6-binary-search-tree/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── bobocode/ │ │ │ └── cs/ │ │ │ ├── BinarySearchTree.java │ │ │ └── RecursiveBinarySearchTree.java │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── bobocode/ │ │ └── cs/ │ │ └── RecursiveBinarySearchTreeTest.java │ ├── 2-2-9-hash-table/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── bobocode/ │ │ │ └── cs/ │ │ │ ├── HashTable.java │ │ │ └── Map.java │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── bobocode/ │ │ └── cs/ │ │ └── HashTableTest.java │ ├── README.md │ ├── data-structures-and-algorithms-util/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── bobocode/ │ │ └── cs/ │ │ └── List.java │ └── pom.xml ├── 3-0-java-core/ │ ├── 3-6-1-file-reader/ │ │ ├── README.MD │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── bobocode/ │ │ │ └── se/ │ │ │ └── FileReaders.java │ │ └── test/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── bobocode/ │ │ │ └── se/ │ │ │ └── FileReadersTest.java │ │ └── resources/ │ │ ├── empty.txt │ │ ├── lines.txt │ │ └── simple.txt │ ├── 3-6-2-file-stats/ │ │ ├── README.MD │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── bobocode/ │ │ │ └── se/ │ │ │ ├── FileStats.java │ │ │ └── FileStatsException.java │ │ └── test/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── bobocode/ │ │ │ └── se/ │ │ │ └── FileStatsTest.java │ │ └── resources/ │ │ ├── scosb.txt │ │ └── sotl.txt │ ├── 3-6-3-crazy-regex/ │ │ ├── README.MD │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── bobocode/ │ │ │ └── se/ │ │ │ └── CrazyRegex.java │ │ └── test/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── bobocode/ │ │ │ └── se/ │ │ │ └── CrazyRegexTest.java │ │ └── resources/ │ │ ├── nasa.json │ │ └── note.txt │ ├── 3-6-4-random-field-comparator/ │ │ ├── README.MD │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── bobocode/ │ │ │ └── se/ │ │ │ └── RandomFieldComparator.java │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── bobocode/ │ │ └── se/ │ │ └── RandomFieldComparatorTest.java │ ├── README.md │ └── pom.xml ├── 4-0-object-oriented-programming/ │ ├── 4-3-1-flight-search/ │ │ ├── README.MD │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── bobocode/ │ │ │ └── oop/ │ │ │ ├── data/ │ │ │ │ └── FlightDao.java │ │ │ ├── factory/ │ │ │ │ └── FlightServiceFactory.java │ │ │ └── service/ │ │ │ └── FlightService.java │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── bobocode/ │ │ └── oop/ │ │ └── FlightServiceTest.java │ ├── README.md │ └── pom.xml ├── 5-0-functional-programming/ │ ├── 5-0-1-lambda-functions-map/ │ │ ├── README.MD │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── bobocode/ │ │ │ └── fp/ │ │ │ ├── FunctionMap.java │ │ │ ├── Functions.java │ │ │ └── exception/ │ │ │ └── InvalidFunctionNameException.java │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── bobocode/ │ │ └── fp/ │ │ └── FunctionsTest.java │ ├── 5-0-2-stream-sum-of-squares/ │ │ ├── README.MD │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── bobocode/ │ │ │ └── fp/ │ │ │ ├── SumOfSquares.java │ │ │ └── exception/ │ │ │ └── InvalidRangeException.java │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── bobocode/ │ │ └── fp/ │ │ └── SumOfSquaresTest.java │ ├── 5-1-1-crazy-lambdas/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── bobocode/ │ │ │ └── fp/ │ │ │ └── CrazyLambdas.java │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── bobocode/ │ │ └── fp/ │ │ └── CrazyLambdasTest.java │ ├── 5-2-1-crazy-streams/ │ │ ├── README.MD │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── bobocode/ │ │ │ └── fp/ │ │ │ ├── CrazyStreams.java │ │ │ └── exception/ │ │ │ └── EntityNotFoundException.java │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── bobocode/ │ │ └── fp/ │ │ └── CrazyStreamsTest.java │ ├── 5-3-1-crazy-optionals/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── bobocode/ │ │ │ └── fp/ │ │ │ ├── CrazyOptionals.java │ │ │ ├── exception/ │ │ │ │ └── AccountNotFoundException.java │ │ │ └── function/ │ │ │ ├── AccountProvider.java │ │ │ ├── AccountService.java │ │ │ └── CreditAccountProvider.java │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── bobocode/ │ │ └── fp/ │ │ └── CrazyOptionalsTest.java │ ├── 5-4-1-fun-prime-numbers/ │ │ ├── README.MD │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── bobocode/ │ │ │ └── fp/ │ │ │ ├── OOSumOfPrimes.java │ │ │ └── PrimeNumbers.java │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── bobocode/ │ │ └── fp/ │ │ └── PrimeNumbersTest.java │ ├── README.md │ ├── pom.xml │ └── src/ │ └── main/ │ └── java/ │ └── com/ │ └── bobocode/ │ ├── lambdas/ │ │ └── tutorial/ │ │ ├── CrazyLambdaExample.java │ │ ├── FunctionComposition.java │ │ ├── LambdaAndMethodReference.java │ │ ├── LambdaComparatorExample.java │ │ ├── LambdaRunnableExample.java │ │ ├── MethodRefToUpperCaseExample.java │ │ ├── MethodReferenceExamples.java │ │ ├── PredefinedInterfacePrimitives.java │ │ └── PredefinedInterfacesExamples.java │ ├── optionals/ │ │ └── tutorial/ │ │ ├── OptionalCreation.java │ │ ├── OptionalExamples.java │ │ ├── OptionalImperativeVsDeclarativeCheck.java │ │ ├── OptionalMapping.java │ │ ├── OptionalPrimitives.java │ │ ├── OptionalReturningMethod.java │ │ ├── OptionalSearchByEmailExample.java │ │ ├── OptionalStream.java │ │ └── README.MD │ └── streams/ │ └── tutorial/ │ ├── ImperativeVsDeclarativeFiltering.java │ ├── ImperativeVsDeclarativeMax.java │ ├── README.MD │ ├── StreamAdditionalFeatures.java │ ├── StreamBasics.java │ ├── StreamCollecting.java │ ├── StreamFiltering.java │ ├── StreamMapping.java │ ├── StreamParallelProcessing.java │ ├── StreamPrimitives.java │ ├── StreamReducing.java │ ├── StreamSideEffectFilteringExample.java │ └── StreamWhileExample.java ├── 6-0-test-driven-development/ │ ├── 6-1-1-stack/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── bobocode/ │ │ │ └── tdd/ │ │ │ ├── LinkedStack.java │ │ │ └── Stack.java │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── bobocode/ │ │ └── tdd/ │ │ └── StackTest.java │ ├── 6-1-2-linked-list/ │ │ ├── README.MD │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── bobocode/ │ │ │ └── tdd/ │ │ │ ├── LinkedList.java │ │ │ └── List.java │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── bobocode/ │ │ └── tdd/ │ │ └── LinkedListTest.java │ ├── 6-1-3-binary-search-tree/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── bobocode/ │ │ │ └── tdd/ │ │ │ ├── BinarySearchTree.java │ │ │ └── RecursiveBinarySearchTree.java │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── bobocode/ │ │ └── tdd/ │ │ └── BinarySearchTreeTest.java │ ├── README.md │ └── pom.xml ├── CONTRIBUTING.MD ├── LICENSE ├── README.md ├── java-fundamentals-util/ │ ├── pom.xml │ └── src/ │ └── main/ │ └── java/ │ └── com/ │ └── bobocode/ │ ├── data/ │ │ └── Accounts.java │ ├── model/ │ │ ├── Account.java │ │ ├── CreditAccount.java │ │ └── Sex.java │ └── util/ │ └── ExerciseNotCompletedException.java ├── lesson-demo/ │ ├── pom.xml │ └── src/ │ └── main/ │ └── java/ │ └── com/ │ └── bobocode/ │ └── DemoApp.java ├── mvnw ├── mvnw.cmd └── pom.xml