Как я могу установить возвращение моего класса enum в ArrayList Java - PullRequest
0 голосов
/ 11 февраля 2020

Итак, у меня есть ArrayList, который содержит значения String в моем методе main.

И я хочу go и найти в классе enum ссылку на каждый элемент моего ArrayList и установить его в тот же index.

Допустим, мой массив arrayList равен ["GUA", "AUG", "CUA"]. Я хочу иметь в своем выводе [Val, Met, Leu].

. Поэтому я пытаюсь исправить метод find (), чтобы он возвращал arrayList - не просто строка, а без использования 'for' l oop в main (). Но он всегда выдаст ошибку при попытке изменить тип возвращаемого значения.

Есть идеи?

public enum Abreviation {
    Ala("GCU", "GCC", "GCA", "GCG"),
    Arg("CGU", "CGC", "CGA", "CGG", "AGA", "AGG"),
    Asn("AAU", "AAC"),
    Asp("GAU", "GAC"),
    Cys("UGU", "UGC"),
    Glu("GAG", "GAA"),
    Gln("CAG", "CAA"),
    Gly("GGU", "GGC", "GGA", "GGG"),
    His("CAC", "CAU"),
    Ile("AUU", "AUC", "AUA"),
    Leu("UUA", "UUG", "CUU", "CUC", "CUA", "CUG"),
    Lys("AAA", "AAG"),
    Met("AUG"),
    Phe("UUU", "UUC"),
    Pro("CCU", "CCC", "CCA", "CCG"),
    Pyl("UAG"),
    Sec("UGA"),
    Ser("UCU", "UCC", "UCA", "UCG", "AGU", "AGC"),
    Thr("ACU", "ACG", "ACA", "ACC"),
    Trp("UGG"),
    Tyr("UAU", "UAC"),
    Val("GUU", "GUC", "GUA", "GUG"),
    Fin("UAA")
    ;

    private final List<String> arn;

    private Abreviation(final String... arn) {
        this.arn = Arrays.asList(arn);
    }


    public boolean contains(final String codon) {
        return this.arn.contains(codon);
    }

}





public class MainMain {

    public static void main(String[] args) {

        ArrayList <String> strings = new ArrayList<String>();

        strings.add("GUA");
        strings.add("AUG");
        strings.add("CUA");

        for (int i = 0; i < strings.size(); i++) {          
            System.out.println(find(strings.get(i), strings));          

        }


    }


    public static List<String> find(final String codon, List<String> strings) {             

        for (final Abreviation abb : Abreviation.values()){

            if (abb.contains(codon)) {
                int arn = strings.indexOf(codon);
                strings.set(arn, abb.name());

                return  strings;
            }
        }
        throw new IllegalArgumentException("Erreur");
    }


}

Ответы [ 3 ]

1 голос
/ 11 февраля 2020

Это потому, что вы печатаете список строк каждый раз, когда вызываете функцию поиска. Поскольку в списке строк три элемента, список строк печатается три раза. Попробуйте это.

public static void main(String[] args) {

    ArrayList <String> strings = new ArrayList<String>();

    strings.add("GUA");
    strings.add("AUG");
    strings.add("CUA");
    System.out.println(find(strings));

}


public static List<String> find(List<String> strings) {             
    boolean flag = false;
    for( int i=0 ; i<strings.size() ; ++i ) {
        String codon = strings.get(i);
        for (final Abreviation abb : Abreviation.values()){
            if (abb.contains(codon)) {
                flag = true;
                int arn = strings.indexOf(codon);
                strings.set(arn, abb.name());
            }
        }
        if( !flag ) {
            throw new IllegalArgumentException("Erreur");
        }
    }
    return strings;
}
0 голосов
/ 11 февраля 2020

Было бы лучше создать новый список с String или Abbreviation, но если вы хотите сделать замену, вы можете использовать replaceAll.

strings.replaceAll(s -> Stream.of(Abreviation.values())
    .filter(x -> x.contains(s))
    .findFirst().orElseThrow(() -> new IllegalArgumentException("Erreur")).name()
);

или без Stream:

strings.replaceAll(s -> {
    for (final Abreviation abb : Abreviation.values()){
        if (abb.contains(s)) {
            return abb.name();
        }
    }
    throw new IllegalArgumentException("Erreur");
});
0 голосов
/ 11 февраля 2020

Почему бы вам не вернуть список Abreviation с?

Как это:

public static List<Abreviation> find(final String codon) {             
    List<Abreviation> result = new ArrayList<>();
    for (final Abreviation abb : Abreviation.values()){
        if (abb.contains(codon)) {
            result.add(abb);
        }
    }
    return result;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...