Как преобразовать String arrayList в логический arrayList? - PullRequest
0 голосов
/ 18 октября 2018

Я использую Java 7, я получил список строк из API, как показано ниже:

List = ["ON","OFF"];

Поэтому я изменил его на:

List = ["true","false"];

Я хочу изменитьпоследний в логическом списке:

List = [true,false];

Вот что я сделал:

String responseapi = response.asString();
                        responseapi= responseapi.replace("ON", String.valueOf(true));
                        responseapi= responseapi.replace("OFF", "false");
                      ArrayList<String> stats = new ArrayList<>();
                        stats.add(responseapi);
                      ArrayList<Boolean> stats = new ArrayList<>();

                        for(String x:stats){
                            stats1.add(Boolean.parseBoolean(x));
                            System.out.println("hi"+stats1);

                        }

Проблема в том, что я получаю:

List = [false,false];

Ответы [ 4 ]

0 голосов
/ 18 октября 2018

Нет необходимости конвертировать список.Вы можете использовать такую ​​функцию

public ArrayList<Boolean> convertToBooleanList(ArrayList<String> responseArrayList) {
        ArrayList<Boolean> convertedList = new ArrayList<Boolean>();

        for (String response : responseArrayList) {
            switch (response) {
                case "ON":
                    convertedList.add(true);
                    break;

                case "OFF":
                    convertedList.add(false);
                    break;
            }
        }
        return convertedList;
}
0 голосов
/ 18 октября 2018

С исходным списком вы можете просто использовать потоковый API, как этот.

Это предполагает, что ваш список ответов не является нулевым и не содержит нулевых значений.

List<String> response = ... // {"ON", "OFF", "ON", "ON", "OFF"}

Для Java 8 +:

List<Boolean> booleanList = response.stream()
    .map(s -> "ON".equalsIgnoreCase(s.trim()))
    .collect(Collectors.toList());

// booleanList == {true, false, true, true, false}

Для предварительной Java 8:

List<Boolean> booleanList = new ArrayList<>();
for(String s : response){
    booleanList.add("ON".equalsIgnoreCase(s.trim()));
}

IПодумайте, что в итоге проблема заключалась в том, что ваш входной список не имел точных значений "ON" или "OFF", у них могли быть пробелы вокруг них, так что s.trim().equals("ON") или s.contains("ON") обходит это.Также вам не нужно было иметь if-else, поскольку вы можете просто добавить результат логического выражения в ваш логический список напрямую.

0 голосов
/ 18 октября 2018

Предполагая, что API возвращает что-то вроде:

    List<String> apiResponse = Arrays.asList("OFF", "ON", "ON", "OFF");

Тогда можно использовать потоковый результат и сопоставить ответ с логическим значением.Например:

    List<Boolean> switches = apiResponse.stream().map(s -> s.equals("ON").collect(Collectors.toList());
0 голосов
/ 18 октября 2018

Вы можете сделать это следующим образом:

List = { "true", "false" };
final Boolean[] booleanList = Arrays.stream(booleanList)
         .map(Boolean::parseBoolean).toArray(Boolean[]::new);

Это должно сработать.

...