Debo ordenar cada elemento de la matriz, en orden alfabético
entrada: [bcdef, dbaqc, abcde, omadd, bbbbb] salida: [bcdef, abcdq, abcde, addmo, bbbbb]
Escribí el código a continuación, pero lo siento detallado (largo).
¿Podría decirme de otra manera, con un código más corto?
Gracias.
import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import static java.lang.String.copyValueOf; public class Main { public static void main(String[] args) { String[] stringsArray = { "bcdef", "dbaqc", "abcde", "omadd", "bbbbb"}; System.out.println(Arrays.toString(stringsArray)); List<String> list = Arrays.stream(stringsArray).map((String s)->{ char[] charArray = s.toCharArray(); Arrays.sort(charArray); return copyValueOf(charArray); }).collect(Collectors.toList()); ArrayList<String> arrayList = new ArrayList<String>(list); stringsArray = Arrays.copyOf(arrayList.toArray(),arrayList.size(),String[].class); System.out.println(Arrays.toString(stringsArray)); } }Si desea modificar la matriz original en el lugar, puede confiar en Arrays.asList() , que crea un contenedor de List alrededor de la matriz:
Arrays.asList(stringsArray) .replaceAll(s -> { char[] chars = s.toCharArray(); Arrays.sort(chars); return new String(chars); }); System.out.println(Arrays.toString(stringsArray)); Arrays.asList() es realmente solo una vista de la matriz original. Cualquier cambio en la lista devuelta se realizará en la matriz y viceversa. Esta es también la razón por la que no puede agregar/eliminar elementos en la lista devuelta.
Parece que desea ordenar los caracteres dentro de cada elemento, no en toda la matriz.
Puede simplificar al tener map() separados (y peek() ya que el método Arrays.sort() no devuelve un valor) pasos. También puede omitir la List redundante recopilando directamente en una matriz de String .
String[] sorted = Arrays.stream(stringsArray) .map(String::toCharArray) .peek(Arrays::sort) .map(String::new) .toArray(String[]::new);