hw2: code
This commit is contained in:
parent
1c8b35a55a
commit
af7c772881
14 changed files with 273 additions and 42 deletions
79
hw2/code/.gitignore
vendored
Normal file
79
hw2/code/.gitignore
vendored
Normal file
|
@ -0,0 +1,79 @@
|
|||
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
|
||||
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
|
||||
|
||||
# User-specific stuff
|
||||
.idea/**/workspace.xml
|
||||
.idea/**/tasks.xml
|
||||
.idea/**/usage.statistics.xml
|
||||
.idea/**/dictionaries
|
||||
.idea/**/shelf
|
||||
|
||||
# AWS User-specific
|
||||
.idea/**/aws.xml
|
||||
|
||||
# Generated files
|
||||
.idea/**/contentModel.xml
|
||||
|
||||
# Sensitive or high-churn files
|
||||
.idea/**/dataSources/
|
||||
.idea/**/dataSources.ids
|
||||
.idea/**/dataSources.local.xml
|
||||
.idea/**/sqlDataSources.xml
|
||||
.idea/**/dynamic.xml
|
||||
.idea/**/uiDesigner.xml
|
||||
.idea/**/dbnavigator.xml
|
||||
|
||||
# Gradle
|
||||
.idea/**/gradle.xml
|
||||
.idea/**/libraries
|
||||
|
||||
# Gradle and Maven with auto-import
|
||||
# When using Gradle or Maven with auto-import, you should exclude module files,
|
||||
# since they will be recreated, and may cause churn. Uncomment if using
|
||||
# auto-import.
|
||||
# .idea/artifacts
|
||||
# .idea/compiler.xml
|
||||
# .idea/jarRepositories.xml
|
||||
# .idea/modules.xml
|
||||
# .idea/*.iml
|
||||
# .idea/modules
|
||||
# *.iml
|
||||
# *.ipr
|
||||
|
||||
# CMake
|
||||
cmake-build-*/
|
||||
|
||||
# Mongo Explorer plugin
|
||||
.idea/**/mongoSettings.xml
|
||||
|
||||
# File-based project format
|
||||
*.iws
|
||||
|
||||
# IntelliJ
|
||||
out/
|
||||
|
||||
# mpeltonen/sbt-idea plugin
|
||||
.idea_modules/
|
||||
|
||||
# JIRA plugin
|
||||
atlassian-ide-plugin.xml
|
||||
|
||||
# Cursive Clojure plugin
|
||||
.idea/replstate.xml
|
||||
|
||||
# SonarLint plugin
|
||||
.idea/sonarlint/
|
||||
|
||||
# Crashlytics plugin (for Android Studio and IntelliJ)
|
||||
com_crashlytics_export_strings.xml
|
||||
crashlytics.properties
|
||||
crashlytics-build.properties
|
||||
fabric.properties
|
||||
|
||||
# Editor-based Rest Client
|
||||
.idea/httpRequests
|
||||
|
||||
# Android studio 3.1+ serialized cache file
|
||||
.idea/caches/build_file_checksums.ser
|
||||
|
||||
target/
|
8
hw2/code/.idea/.gitignore
vendored
Normal file
8
hw2/code/.idea/.gitignore
vendored
Normal file
|
@ -0,0 +1,8 @@
|
|||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
13
hw2/code/.idea/compiler.xml
Normal file
13
hw2/code/.idea/compiler.xml
Normal file
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CompilerConfiguration">
|
||||
<annotationProcessing>
|
||||
<profile name="Maven default annotation processors profile" enabled="true">
|
||||
<sourceOutputDir name="target/generated-sources/annotations" />
|
||||
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
|
||||
<outputRelativeToContentRoot value="true" />
|
||||
<module name="Assignment2" />
|
||||
</profile>
|
||||
</annotationProcessing>
|
||||
</component>
|
||||
</project>
|
7
hw2/code/.idea/encodings.xml
Normal file
7
hw2/code/.idea/encodings.xml
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Encoding">
|
||||
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
|
||||
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
|
||||
</component>
|
||||
</project>
|
20
hw2/code/.idea/jarRepositories.xml
Normal file
20
hw2/code/.idea/jarRepositories.xml
Normal file
|
@ -0,0 +1,20 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="RemoteRepositoriesConfiguration">
|
||||
<remote-repository>
|
||||
<option name="id" value="central" />
|
||||
<option name="name" value="Central Repository" />
|
||||
<option name="url" value="https://repo.maven.apache.org/maven2" />
|
||||
</remote-repository>
|
||||
<remote-repository>
|
||||
<option name="id" value="central" />
|
||||
<option name="name" value="Maven Central repository" />
|
||||
<option name="url" value="https://repo1.maven.org/maven2" />
|
||||
</remote-repository>
|
||||
<remote-repository>
|
||||
<option name="id" value="jboss.community" />
|
||||
<option name="name" value="JBoss Community repository" />
|
||||
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
|
||||
</remote-repository>
|
||||
</component>
|
||||
</project>
|
12
hw2/code/.idea/misc.xml
Normal file
12
hw2/code/.idea/misc.xml
Normal file
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||
<component name="MavenProjectsManager">
|
||||
<option name="originalFiles">
|
||||
<list>
|
||||
<option value="$PROJECT_DIR$/pom.xml" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_18" default="true" project-jdk-name="temurin-18" project-jdk-type="JavaSDK" />
|
||||
</project>
|
6
hw2/code/.idea/vcs.xml
Normal file
6
hw2/code/.idea/vcs.xml
Normal file
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
|
||||
</component>
|
||||
</project>
|
|
@ -3,16 +3,22 @@ package ch.usi.inf.ajp22;
|
|||
import ch.usi.inf.ajp22.flyable.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class Main {
|
||||
|
||||
/**
|
||||
* 3 Points
|
||||
* TODO: Create a public static void function called "callFlyMethods".
|
||||
* input: a List of objects that implement the Flyable interface.
|
||||
* This function calls the method "fly" of every object inside the list.
|
||||
* Create a public static void function called "callFlyMethods".
|
||||
* input: a List of objects that implement the Flyable interface.
|
||||
* This function calls the method "fly" of every object inside the list.
|
||||
*/
|
||||
public static void callFlyMethod(Collection<? extends Flyable> list) {
|
||||
list.forEach(Flyable::fly);
|
||||
}
|
||||
|
||||
/**
|
||||
* 3 Points
|
||||
|
@ -22,9 +28,25 @@ public class Main {
|
|||
* This function iterates over all the elements of "src" and copies them in the "dst" List.
|
||||
* If the element in "src" starts with the "z" or "Z" character then in the "dst" list is
|
||||
* added a Wizard instead of a person. The Wizard's age must be 100 times the person's age.
|
||||
*
|
||||
* Remember to use the get-put principle properly.
|
||||
* <p>
|
||||
* Remember to use the get-put principle properly.
|
||||
*/
|
||||
public static void transformPeople(List<? extends People> src, List<? super People> dst) {
|
||||
// true -> quelli con la z (lista)
|
||||
// false -> quelli senza la z (lista)
|
||||
Map<Boolean, List<People>> startsWithZPartitioned = src.stream().collect(
|
||||
Collectors.groupingBy(p -> p.getName().matches("^[zZ].*"))
|
||||
);
|
||||
|
||||
// add the non-Wizards
|
||||
dst.addAll(startsWithZPartitioned.getOrDefault(false, List.of()));
|
||||
|
||||
// convert the wizard-elects into Wizards and then add them
|
||||
dst.addAll(startsWithZPartitioned.getOrDefault(true, List.of())
|
||||
.stream()
|
||||
.map(p -> new Wizard(p.getName(), p.getAge() * 100))
|
||||
.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* You can use the main function to help check that you are on the right path for your solution.
|
||||
|
@ -69,7 +91,7 @@ public class Main {
|
|||
*/
|
||||
PeopleComparator<People> peopleComparator = new PeopleComparator<>();
|
||||
int res = peopleComparator.compare(bill, circe);
|
||||
if(res > 0) {
|
||||
if (res > 0) {
|
||||
System.out.printf("%s is greeter than %s\n", bill.getName(), circe.getName());
|
||||
} else if (res == 0) {
|
||||
System.out.printf("%s is equal to %s\n", bill.getName(), circe.getName());
|
||||
|
@ -78,7 +100,7 @@ public class Main {
|
|||
}
|
||||
|
||||
int res2 = peopleComparator.compare(merlin, circe);
|
||||
if(res2 > 0) {
|
||||
if (res2 > 0) {
|
||||
System.out.printf("%s is greeter than %s\n", merlin.getName(), circe.getName());
|
||||
} else if (res2 == 0) {
|
||||
System.out.printf("%s is equal to %s\n", merlin.getName(), circe.getName());
|
||||
|
@ -98,9 +120,9 @@ public class Main {
|
|||
/*
|
||||
* Example of comparing two Wizards
|
||||
*/
|
||||
if ( circe.compareTo(merlin) > 0) {
|
||||
if (circe.compareTo(merlin) > 0) {
|
||||
System.out.println("Circe is faster than Merlin");
|
||||
} else if ( circe.compareTo(merlin) < 0) {
|
||||
} else if (circe.compareTo(merlin) < 0) {
|
||||
System.out.println("Circe is slower than Merlin");
|
||||
} else {
|
||||
System.out.println("Circe has the same speed as Merlin");
|
||||
|
|
24
hw2/code/src/main/java/ch/usi/inf/ajp22/Third.java
Normal file
24
hw2/code/src/main/java/ch/usi/inf/ajp22/Third.java
Normal file
|
@ -0,0 +1,24 @@
|
|||
package ch.usi.inf.ajp22;
|
||||
class First {
|
||||
void doSomething() {
|
||||
System.out.println(" I am a class ");
|
||||
}
|
||||
}
|
||||
|
||||
interface Second {
|
||||
default void doSomething() {
|
||||
System.out.println(" I am an interface ");
|
||||
}
|
||||
}
|
||||
|
||||
public class Third extends First implements Second {
|
||||
@Override
|
||||
public void doSomething() {
|
||||
super.doSomething();
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
Third third = new Third();
|
||||
third.doSomething();
|
||||
}
|
||||
}
|
|
@ -1,31 +1,32 @@
|
|||
package ch.usi.inf.ajp22.flyable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 3 Points
|
||||
* TODO: Improve the class below by parametrizing it (i.e. using generics).
|
||||
* passengers can be of type People or any other subtype of People.
|
||||
* Improve the class below by parametrizing it (i.e. using generics).
|
||||
* passengers can be of type People or any other subtype of People.
|
||||
* 3 Points
|
||||
* TODO: Create the following method:
|
||||
* 1) moveToPassengers
|
||||
* Input: a List of People called "dst".
|
||||
* This method must copy all the passengers of the current plane to the "dst" List.
|
||||
* After the copy, the List of passenger of the current plane must be cleared.
|
||||
*
|
||||
* Remember to use the get-put principle properly.
|
||||
* Create the following method:
|
||||
* 1) moveToPassengers
|
||||
* Input: a List of People called "dst".
|
||||
* This method must copy all the passengers of the current plane to the "dst" List.
|
||||
* After the copy, the List of passenger of the current plane must be cleared.
|
||||
* <p>
|
||||
* Remember to use the get-put principle properly.
|
||||
*/
|
||||
public class Airplane implements Flyable{
|
||||
public class Airplane<T extends People> implements Flyable {
|
||||
|
||||
private final List passengers;
|
||||
private final List<T> passengers;
|
||||
|
||||
@Override
|
||||
public int getSpeed() {
|
||||
return 740;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void fly() {
|
||||
System.out.println("Check the engines and fly");
|
||||
|
@ -35,12 +36,16 @@ public class Airplane implements Flyable{
|
|||
this.passengers = new ArrayList<>();
|
||||
}
|
||||
|
||||
public void setPassengers(List list) {
|
||||
public <U extends T> void setPassengers(Collection<U> list) {
|
||||
passengers.addAll(list);
|
||||
}
|
||||
|
||||
public List getPassengers() {
|
||||
return this.passengers;
|
||||
public void moveToPassengers(final List<? super T> that) {
|
||||
that.addAll(this.passengers);
|
||||
this.passengers.clear();
|
||||
}
|
||||
|
||||
public List<T> getPassengers() {
|
||||
return this.passengers;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,24 +2,24 @@ package ch.usi.inf.ajp22.flyable;
|
|||
|
||||
/**
|
||||
* 3 Points
|
||||
* TODO: Improve the class below by parametrizing it (i.e. using generics).
|
||||
* passengers can be of type People or any other subtypes of People.
|
||||
* flyable can be any type that implements the Flyable interface.
|
||||
* This may lead in changing the type of the fields passenger and flyable.
|
||||
* Improve the class below by parametrizing it (i.e. using generics).
|
||||
* passengers can be of type People or any other subtypes of People.
|
||||
* flyable can be any type that implements the Flyable interface.
|
||||
* This may lead in changing the type of the fields passenger and flyable.
|
||||
*/
|
||||
public class Couple {
|
||||
public class Couple<T extends People, U extends Flyable> {
|
||||
|
||||
private final Object passenger;
|
||||
private final Object flyable;
|
||||
private final T passenger;
|
||||
private final U flyable;
|
||||
|
||||
public Couple(Object passenger, Object flyable) {
|
||||
public Couple(T passenger, U flyable) {
|
||||
this.passenger = passenger;
|
||||
this.flyable = flyable;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.format("Passenger :%s On :%s", ((People)this.passenger).getName(),
|
||||
return String.format("Passenger :%s On :%s", this.passenger.getName(),
|
||||
this.flyable.getClass().getSimpleName());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,16 @@
|
|||
package ch.usi.inf.ajp22.flyable;
|
||||
|
||||
import java.util.Comparator;
|
||||
|
||||
/**
|
||||
* 3 Points
|
||||
* TODO: Write a Comparator named FlyableComparator.
|
||||
* Comparison should be done using the speed of types that implement the Flyable interface.
|
||||
*/
|
||||
* Write a Comparator named FlyableComparator.
|
||||
* Comparison should be done using the speed of types that implement the Flyable interface.
|
||||
*/
|
||||
public final class FlyableComparator implements Comparator<Flyable> {
|
||||
|
||||
@Override
|
||||
public int compare(final Flyable o1, final Flyable o2) {
|
||||
return o2.getSpeed() - o1.getSpeed();
|
||||
}
|
||||
}
|
|
@ -1,7 +1,18 @@
|
|||
package ch.usi.inf.ajp22.flyable;
|
||||
|
||||
import java.util.Comparator;
|
||||
|
||||
/**
|
||||
* 3 Points
|
||||
* TODO: Create a Comparator, named PeopleComparator, for People and its subtypes.
|
||||
* Comparison should be done first by age and then by name length.
|
||||
*/
|
||||
* Create a Comparator, named PeopleComparator, for People and its subtypes.
|
||||
* Comparison should be done first by age and then by name length.
|
||||
*/
|
||||
public final class PeopleComparator<T extends People> implements Comparator<T> {
|
||||
private static final Comparator<People> AGE_AND_NAME_CMP = Comparator.comparingInt(People::getAge)
|
||||
.thenComparingInt(p -> p.getName().length());
|
||||
|
||||
@Override
|
||||
public int compare(final T o1, final T o2) {
|
||||
return AGE_AND_NAME_CMP.compare(o1, o2);
|
||||
}
|
||||
}
|
|
@ -2,10 +2,10 @@ package ch.usi.inf.ajp22.flyable;
|
|||
|
||||
/**
|
||||
* 4 Points
|
||||
* TODO: Let the class implement Flyable and Comparable<Flyable>.
|
||||
* The comparison should be done using the method getSpeed.
|
||||
* Let the class implement Flyable and Comparable<Flyable>.
|
||||
* The comparison should be done using the method getSpeed.
|
||||
*/
|
||||
public class Wizard extends People {
|
||||
public class Wizard extends People implements Flyable, Comparable<Flyable> {
|
||||
|
||||
private int speed;
|
||||
public Wizard(String name, int age) {
|
||||
|
@ -16,4 +16,19 @@ public class Wizard extends People {
|
|||
public void setSpeed(int speed) {
|
||||
this.speed = speed;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fly() {
|
||||
System.out.println("Check broom and fly");
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSpeed() {
|
||||
return speed;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(Flyable o) {
|
||||
return this.speed - o.getSpeed();
|
||||
}
|
||||
}
|
||||
|
|
Reference in a new issue