Ява разделить список на две части - PullRequest
0 голосов
/ 29 августа 2018

У меня есть список:

 [132567,Amelia, 123476,Charlie, 123516,Emily, 143456,George, 123466,Harry, 123457,Jack, 125456,Joshua, 132456,Lily, 123456,Oliver]

Я хочу разделить этот список на два, поэтому один список - это ID, а другой - NAMES. Требуется также, чтобы идентификатор [1] соответствовал NAME [1] и т. Д.

Итак, по сути, я хочу иметь два таких списка:

id    = [132567, 123476, 123516, 143456, 123466, 123457, 125456, 132456, 123456]
names = [Amelia, Charlie, Emily, George, Harry, Jack, Joshua, Lily, Oliver]

Как мне сделать это самым простым способом? Спасибо

Ответы [ 4 ]

0 голосов
/ 30 августа 2018

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

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

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

В маловероятном случае, когда вы предполагаете использовать «Список», тогда метод для вышеуказанных массивов будет работать, но, исходя из сложности вопроса, я предполагаю, что списки появятся позже.

0 голосов
/ 29 августа 2018

Итак, давайте предположим, что у вас есть список, как показано ниже, вы можете перебирать и разделять строковые и целые элементы, сопоставляя их с регулярным выражением:

public class Main {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("1234", "sadf", "1234124", "asdfas");

        List<String> idList = new ArrayList(); // you can make it String or Integer
        List<String> nameList = new ArrayList();

        for (String item : list) {
            // here we distinguish digits only
            if (item.matches("^[0-9]*$")) {
                idList.add(item);
            }else {
                nameList.add(item);
            }
        }

        idList.forEach(System.out::println);
        System.out.println("");
        nameList.forEach(System.out::println);
    }
}

Выход:

1234
1234124

sadf
asdfas
0 голосов
/ 29 августа 2018

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

String text = "132567, Amelia, 123476, Charlie, 123516, Emily, 143456, George, 123466, Harry, 123457, Jack, 125456, Joshua, 132456, Lily, 123456, Oliver";

ArrayList id = new ArrayList(), name = new ArrayList();
String[] split = text.split(",");
for (String string : split) {
    if (Character.isDigit(string.trim().charAt(0))) {
        id.add(string.trim());
    } else {
        name.add(string.trim());
    }
}

Если вы хотите получить 6-й элемент,

System.out.println(id.get(5));
System.out.println(name.get(5));

будет:

123457
Jack
0 голосов
/ 29 августа 2018

Вы можете разделить по предикату (например, который соответствует строкам в регулярном выражении):

String text = "132567,Amelia, 123476,Charlie, 123516,Emily, 143456,George, 123466,Harry, 123457,Jack, 125456,Joshua, 132456,Lily, 123456,Oliver";

Map<Boolean, List<String>> split = Arrays.asList(text.split(","))
        .stream().map(String::trim)
        .collect(Collectors.partitioningBy(s -> s.matches("^\\d+$")));

Возвращает

{false=[Amelia, Charlie, Emily, George, Harry, Jack, Joshua, Lily, Oliver], 
true=[132567, 123476, 123516, 143456, 123466, 123457, 125456, 132456, 123456]}

Где true - список чисел (соответствует шаблону чисел), а false - список имен (не соответствует шаблону чисел).

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