возвращение отсортированного по алфавиту списка животных, последняя буква которого не заканчивается буквами, перечисленными в аргументе - PullRequest
0 голосов
/ 23 апреля 2020

Мне нужно создать метод, который возвращает список животных в алфавитном порядке c, который не заканчивается ни на одной из букв в массиве аргументов. В возвращаемом списке также не должно быть дубликатов

public class TrimmList
{

private List<String> inList = new ArrayList<String>(Arrays.asList("aardvark", 
"cow", "dog", "cow",
"elephant","dog", "frog", "bird", "swan", "python", "pig"));

public List<String> trimList(char[] args)
{
Set<String> toRemove = new HashSet<>();
for (String a : arr) {
for (String i : inList) {
if (i.endsWith(a)) {
toRemove.add(i);
}
inList.removeAll(toRemove);
}
}
System.out.println(inList);
 // [bird, aardvark, cow, elephant]
}

Так, если, например, одна из букв в аргументе 'g', pig не должна возвращаться

Любой совет оценили

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Если вы хотите иметь меньше лямбда-выражений, вы также можете использовать этот фрагмент.

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class TrimList {

    private List<String> inList = new ArrayList<String>(Arrays.asList("aardvark", "cow", "dog", "cow",
            "elephant", "dog", "frog", "bird", "swan", "python", "pig"));

    public List<String> trimList(char[] args) {

        inList = new ArrayList<>(new HashSet<>(inList));
        List<String> temp = new ArrayList<>();

        for (String animal : inList) {
            for (char c : args) {
                if (animal.endsWith(String.valueOf(c))) {
                    temp.add(animal);
                }
            }
        }
        inList.removeAll(temp);
        Collections.sort(inList);
        System.out.println(inList);
        return inList;
    }
}

Вывод будет

[aardvark, bird, cow, elephant, python, swan]
0 голосов
/ 24 апреля 2020

Лучше использовать TreeSet, чтобы строки автоматически сортировались по алфавиту. Сделайте это следующим образом:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

public class AddToArrayList {
    public static void main(String[] args) {
        // Test
        List<String> inList = new ArrayList<String>(Arrays.asList("aardvark", "cow", "dog", "cow", "elephant", "dog",
                "frog", "bird", "swan", "python", "pig"));
        System.out.println(trimList(new char[] { 'g', 'n' }, inList));
    }

    static List<String> trimList(char[] args, List<String> inList) {
        Set<String> result = new TreeSet<String>();
        boolean found;
        for (String s : inList) {
            found = false;
            for (char ch : args) {
                if (s.endsWith(String.valueOf(ch))) {
                    found = true;
                }
            }
            if (!found) {
                result.add(s);
            }
        }
        return new ArrayList<>(result);
    }
}

Вывод:

[aardvark, bird, cow, elephant]

Обратите внимание, когда строка из списка добавляется в набор. Строка из списка должна добавляться в набор только после сравнения всех символов в args[].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...