Code Review

JCF: Collect, List

?

public Collection<String> removeWordsByLength(Collection<String> stringList, Integer wordLength) {
    stringList.removeIf(word -> word.length() == wordLength);

    return stringList;
}

?

@DisplayName("Test of resetWordsByLength(), returns Collection<String> according replaced elements with \ngiven length to '*', assertTrue()")
@Test
void resetWordsByLengthTest1() {
    collection = collectionUtil.resetWordsByLength(collection, 2);
    boolean expected = collection.equals((new ArrayList<>(Arrays.asList("1", "*", "111", "*"))));

    System.out.println(collection);
    Assertions.assertTrue(expected);
}

?

public class Studio {
    List<Actor> actors;

    public Studio(List<Actor> actors) {
        this.actors = actors;
    }


    public Studio fire(List<Actor> actors) {
        Iterator<Actor> iterator = actors.iterator();
        Integer highestFee = 0;

        for (Actor actor : actors) {
            if (actor.getFee() > highestFee) {
                highestFee = actor.getFee();
            }
        }

        while (iterator.hasNext()) {
            if (Objects.equals(iterator.next().getFee(), highestFee)) {
                iterator.remove();
            }
        }

        return new Studio(actors);
    }

    public List<Actor> getActors() {
        return actors;
    }
}

?

public static void printList(Studio studio) {
    for (Actor actor : studio.getActors()) {
        System.out.println("Actor: " + actor.getFirstName() + " " + actor.getLastName() + ", " + actor.getFee()
                + "$ fee, " + actor.getAge() + " years old");
    }
    System.out.println();
}

?

public class StudioTest {
    private final Actor dzmitry = new Actor("Dzmitry", "Krasiuk", 850, 29);
    private final Actor alexander = new Actor("Alexander", "Braim", 940, 27);
    private final Actor elena = new Actor("Elena", "Ankova", 1100, 33);
    private final Actor julia = new Actor("Julia", "Serbskaya", 1100, 25);
    private final Actor anna = new Actor("Anna", "Krasiuk", 1400, 22);
    private final Actor iya = new Actor("Iya", "Krasiuk", 1100, 30);
    private Studio sonyVision;
    ArrayList<Actor> actorsList;
    private Comparator<Actor> comparator;

    @BeforeEach
    void init() {
        actorsList = new ArrayList<>(Arrays.asList(dzmitry, alexander, elena, julia, anna, iya));
        sonyVision = new Studio(actorsList);
    }

    @DisplayName("Test of fire(), returns actors list with removed actor which has highest salary")
    @Test
    void fireTest() {
        sonyVision.fire(sonyVision.getActors());
        Studio expected = new Studio(new ArrayList<>(Arrays.asList(dzmitry, alexander, elena, julia, iya)));

        Assertions.assertEquals(expected.getActors(), sonyVision.getActors());
    }

?

public class Person {
    private final String name;
    private final String surname;
    private final Integer age;
    private final Double averageAnnualMark;

    public Person(String name, String surname, Integer age, Double averageAnnualMark) {
        this.name = name;
        this.surname = surname;
        this.age = age;
        this.averageAnnualMark = averageAnnualMark;
    }

    public Person() {
        this.name = "Name";
        this.surname = "Surname";
        this.age = 0;
        this.averageAnnualMark = 0.0;
    }

?

public Collection<String> removeWordsByLength(Collection<String> collection, Integer wordLength) {
    Collection<String> collectionTwo = new ArrayList<>();
    for (String word : collection) {
        if (word.length() != wordLength) {
            collectionTwo.add(word);
        }
    }
    return collectionTwo;
}

?

public class StringCollectionUtilTest {
    private StringCollectionUtil collectionUtil;
    private Collection<String> testCollection;
    private Collection<String> expectCollection;
    private Collection<String> actualCollection;

    @BeforeEach
    public void init() {
        collectionUtil = new StringCollectionUtil();
        testCollection = new ArrayList<>(Arrays.asList("sweet", "dreams", "are", "made", "of", "this", "who", "am", "I", "to", "disagree"));
    }

    @Test
    public void resetWordsByLengthTest1() {
        actualCollection = collectionUtil.resetWordsByLength(testCollection, 4);

        expectCollection = new ArrayList<>(Arrays.asList("sweet", "dreams", "are", "*", "of", "*", "who", "am", "I", "to", "disagree"));
        Assertions.assertEquals(expectCollection, actualCollection);
    }

?

public class PersonAgeComparator implements Comparator<Person> {
    @Override
    public int compare(Person a, Person b) {
        int result = 0;
        if (a.getAge() > b.getAge()) {
            result = 1;
        } else if (a.getAge() < b.getAge()) {
            result = -1;
        }
        return result;
    }
}

?

public class ageComparator implements Comparator<Person> {
    @Override
    public int compare(Person p1, Person p2) {
        if (p1.getAge() == p2.getAge())
            return 0;
        else if (p1.getAge() > p2.getAge())
            return 1;
        else
            return -1;
    }
}

?

public static List fire(List<Actor> actors) {
        int maxFee = 0;
        int maxFeeIndex = 0;
        for (Actor a : actors) {
            if (a.getFee() > maxFee) {
                maxFee = a.getFee();
                maxFeeIndex = actors.indexOf(a);
            }
        }
        actors.remove(maxFeeIndex);
        return actors;
}

?

@Override
public int compare(Actor a1, Actor a2) {
    if (a1.getFee() == a2.getFee())
    return 0;
    else if (a1.getFee() > a2.getFee())
        return 1;
    else
        return -1;
}

?

public class Person {
    private final String name;
    private final String surname;
    private final int age;
    private final double averageAnnualMark;

    /**
     * Constructor.
     *
     * @param name              student's name.
     * @param surname           last name of the student.
     * @param age               student's age.
     * @param averageAnnualMark average student score.
     */
    public Person(String name, String surname, int age, double averageAnnualMark) {
        this.name = name;
        this.surname = surname;
        this.age = age;
        this.averageAnnualMark = averageAnnualMark;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        Person person = (Person) o;
        return age == person.age && Double.compare(person.averageAnnualMark, averageAnnualMark)
                == 0 && name.equals(person.name) && surname.equals(person.surname);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, surname, age, averageAnnualMark);
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", surname='" + surname + '\'' +
                ", age=" + age +
                ", averageAnnualMark=" + averageAnnualMark +
                '}';
    }

    public String getName() {
        return name;
    }

    public String getSurname() {
        return surname;
    }

    public String getFullName() {
        return getName() + " " + getSurname();
    }

    public int getAge() {
        return age;
    }

    public double getAverageAnnualMark() {
        return averageAnnualMark;
    }
}

?

@DisplayName("String collection util test.")
class StringCollectionUtilTest {
    Collection<String> stringCollection;

    @BeforeEach
    void init() {
        String[] strings = new String[]{"this", "is", "lots", "of", "fun", "for", "every", "Java", "programmer"};
        stringCollection = new ArrayList<>(Arrays.asList(strings));
    }

    @Test
    @DisplayName("Reset words by length.")
    void resetWordsByLength() {
        String[] str1 = new String[]{"*", "is", "*", "of", "fun", "for", "every", "*", "programmer"};

        Assertions.assertEquals(new ArrayList<>(Arrays.asList(str1)),
                StringCollectionUtil.resetWordsByLength(stringCollection, 4));
    }

    @Test
    @DisplayName("Remove words by length.")
    void removeWordsByLength() {
        String[] str2 = new String[]{"this", "lots", "fun", "for", "every", "Java", "programmer"};

        StringCollectionUtil.removeWordsByLength(stringCollection, 2);

        Assertions.assertEquals(new ArrayList<>(Arrays.asList(str2)), stringCollection);
    }
}