2017-02-03 4 views
0

У меня есть 3-й массив, и я хочу разбить на [x] [x] [0], чтобы создать новый массив.Как разбить строку из 3-мерного массива на новый 2-мерный массив в java

static String[][][] flight = { 
     { 
     {"MON,TUE,WED,THU,FRI,SAT,SUN","TG2040","06:55","07:55"}, 
     {"MON,TUE,WED,THU,FRI,SAT,SUN","TG2042","10:35","11:35"} 
     }, 
     { 
     {"MON,TUE,WED,THU,FRI,SAT,SUN","TG2041","08:25","09:20"}, 
     {"MON,TUE,WED,THU,FRI,SAT,SUN","TG2043","12:05","13:05"} 
     } 

Я хочу создать новый 2-мерный массив, подобный этому.

String[][] flight_of_day = { 
{"MON","TG2040","06:55","07:55"}, 
{"TUE","TG2040","06:55","07:55"}, 
{"WED","TG2040","06:55","07:55"}, 
.... // Monday To Sunday of TG2040 

{"MON","TG2042","10:35","11:35"}, 
{"TUE","TG2042","10:35","11:35"}, 
.... // Monday To Sunday of TG2042 

{"MON","TG2041","08:25","09:20"}, 
{"TUE","TG2041","08:25","09:20"}, 
.... // Monday To Sunday of TG2041 
+2

Вместо использования массивов (массивов) *, определите классы и используйте экземпляры. – rom1v

+0

Является ли 3-D Array входным, на который у вас нет контроля? Потому что, как говорит другой комментатор, классы и экземпляры кажутся более элегантным способом. – Alex

+0

Я не понял, пожалуйста, пример и объясню. –

ответ

0

Это итерацию пример того, как сделать это.

  final List<String[]> tmpList = new ArrayList<>(); 
    for (String[][] t : flight) { 
     if (t == null) { 
      continue; 
     } 
     for (String[] k : t) { 
      if (k == null || k.length < 1 || k[0] == null) { 
       continue; 
      } 
      for (String day : k[0].split(",")) { 
       String[] tmp = Arrays.copyOf(k, k.length); 
       tmp[0] = day; 
       tmpList.add(tmp); 
      } 
     } 
    } 
    String[][] flight_of_day = tmpList.toArray(new String[tmpList.size()][]); 
+0

Большое спасибо –

+0

были ошибки при этом утверждении для (String [] [] t: flight) { if (t == null) { continue; } –

+0

@PhijakChanyawiwatkul Я не вижу никаких проблем в этом коде, если полет не равен нулю, тогда метод должен возвращать/исключать исключение: 'if (flight == null) { return; } ' –

1
String[][] flight_of_day = 
      Stream.of(flight) 
        .flatMap(Arrays::stream) 
        .flatMap(
          t -> Arrays.stream(t[0].split(",")) 
            .map(day -> { 
             String[] tmp = Arrays.copyOf(t, t.length); 
             tmp[0] = day; 
             return tmp; 
            }) 
       ).toArray(String[][]::new); 
+0

yup you быстрее, чем я +1 –

+0

Большое спасибо. но у вас есть способ использовать for-loop? –