La realización más sencilla de la clasificación de caracteres chinos

public static void main(String[] args) {
        List<String> strings = Arrays.asList("张三", "王五", "安娜", "李四", "张志东", "杨天华");

        List<String> sorted = strings.stream().sorted(Collator.getInstance(Locale.CHINESE)).collect(Collectors.toList());
        System.out.println("自然正序排序"+JSON.toJSON(sorted));

        List<String> sorted1 = strings.stream().sorted(Collections.reverseOrder(Collator.getInstance(Locale.CHINESE))).collect(Collectors.toList());
        System.out.println("汉子倒序排序"+JSON.toJSON(sorted1));
    }


输出结果:
自然正序排序["安娜","李四","王五","杨天华","张三","张志东"]
汉子倒序排序["张志东","张三","杨天华","王五","李四","安娜"]

Expresión lambda 4: caso de desarrollo MapReduce de java8

Introducción

Al implementar la herramienta MapReduce a través de la interfaz Stream en Lambda, una comprensión simple es similar a la herramienta de estadísticas de agrupación en SQL, excepto que MapReduce es una operación estadística final que se puede procesar para cada conjunto de datos.

Contenido específico

No importa cómo cambie la colección, debe ser una matriz dinámica, por lo que toda la operación MapReduce se realiza alrededor de los objetos.
Ejemplo: Defina una clase de carrito de compras, habrá varios objetos de clase Car almacenados en la clase de colección

public class Car {

    private String pname;
    private Integer amouter;
    private Double price;

    public Car(String pname, Integer amouter, Double price) {
        super();
        this.pname = pname;
        this.amouter = amouter;
        this.price = price;
    }
    public Car() {
        super();
    }
    public String getPname() {
        return pname;
    }
    public void setPname(String pname) {
        this.pname = pname;
    }
    public Integer getAmouter() {
        return amouter;
    }
    public void setAmouter(Integer amouter) {
        this.amouter = amouter;
    }
    public Double getPrice() {
        return price;
    }
    public void setPrice(Double price) {
        this.price = price;
    }
}

Utilice Map () para procesar datos por separado

Ejemplo: procesamiento de datos por separado

public class TestDemo {
    public static void main(String[] args) {
        List<Car> all=new ArrayList<Car>();
        all.add(new Car("java",200,20.8));
        all.add(new Car("ios",200,10.8));
        all.add(new Car("c",200,2.8));
        all.add(new Car("c++",200,10.8));
        all.add(new Car("mongo",200,10.8));
        all.add(new Car("android",200,12.8));
        all.add(new Car("oracle",20,8.8));
        all.stream().map(car->{
            System.out.print("书名:"+car.getPname()+" 总价:");
            return car.getAmouter()*car.getPrice();
        }).forEachOrdered(System.out::println);
    }
}

El resultado de salida es el siguiente:
Título: c ++ Precio total: 2160.0
Título: mongo Precio total: 2160.0
Título del libro: android Precio total: 2560.0
Título del libro: Oracle Precio total: 176.0

Se puede ver en el código anterior que la función del método map () es procesar cada dato de la colección.

Utilice Reducir () para convertir todos los datos de la colección en un resultado

Si usa el método map () para recombinar los datos, reduce () convertirá todos los datos de la colección en un resultado, al igual que las funciones de sum (), avg (), count () en SQL.
método reduce (): public final Optional<P_OUT> reduce(BinaryOperator<P_OUT> accumulator)
ejemplo, para realizar la operación integral de compra de bienes

public class TestDemo {
    public static void main(String[] args) {
        List<Car> all=new ArrayList<Car>();
        all.add(new Car("java",200,20.8));
        all.add(new Car("ios",200,10.8));
        all.add(new Car("c",200,2.8));
        all.add(new Car("c++",200,10.8));
        all.add(new Car("mongo",200,10.8));
        all.add(new Car("android",200,12.8));
        all.add(new Car("oracle",20,8.8));
        double result =all.stream().map(car->{
            return car.getAmouter()*car.getPrice();
        }).reduce((sum,carPrice)->sum+carPrice).get();
        System.out.println("购买总金额"+result);
    }
}

Los resultados de la ejecución del código son los siguientes: el
monto total de la compra es 13936.0

Map y Reduce operan juntos

Si desea hacer estadísticas, puede incluir: suma, máximo, mínimo, promedio, cantidad
. Las operaciones correspondientes se proporcionan en la interfaz de Stream:

  • Procesamiento de datos dobles:DoubleStream mapToDouble(ToDoubleFunction<? super T> mapper)
  • Procesando operaciones int:IntStream mapToInt(ToIntFunction<? super T> mapper)
  • Procesamiento de operaciones largas:LongStream mapToLong(ToLongFunction<? super T> mapper)

    Los siguientes métodos de operación estadística se proporcionan en cada interfaz devuelta:

  • Estadísticas de datos dobles (DoubleStream): público DoubleSummaryStatistics summaryStatistics ()

  • Estadísticas de datos Int (IntStream): resumen de estadísticas IntSummaryStatistics público ()
  • Estadísticas de datos largos (LongStream): public LongSummaryStatistics summaryStatistics ()
    Estas clases proporcionan una serie de métodos getXxx () para información relacionada con las estadísticas.
    Ejemplo: implementar la función de reducción
public class TestDemo {
    public static void main(String[] args) {
        List<Car> all=new ArrayList<Car>();
        all.add(new Car("java",200,20.8));
        all.add(new Car("ios",200,10.8));
        all.add(new Car("c",200,2.8));
        all.add(new Car("c++",200,10.8));
        all.add(new Car("mongo",200,10.8));
        all.add(new Car("android",200,12.8));
        all.add(new Car("oracle",20,8.8));
        DoubleSummaryStatistics result=all.stream().mapToDouble(myCar->{
            return myCar.getAmount()*myCar.getPrice();
        }).summaryStatistics();
        System.out.println("统计量: "+result.getCount());
        System.out.println("最大值: "+result.getMax());
        System.out.println("最小值: "+result.getMin());
        System.out.println("总和: "+result.getSum());
        System.out.println("平均值: "+result.getAverage());
    }
}

Valor de salida:
Estadísticas: 7
Máximo: 4160.0
Mínimo: 176.0
Suma: 13936.0
Promedio: 1990.857142857143

Todo el proceso es el método de análisis MapReduce utilizado en Mongodb.

 

 

Supongo que te gusta

Origin blog.csdn.net/yangguoqi/article/details/106742343
Recomendado
Clasificación