No puedo conseguir flujo de Java para el trabajo con ArrayList

Sejsbo preguntar:

Por lo tanto, he estado jugando con Java arroyos un poco, y encontró algo muy frustrante.

Quiero hacer una lista de este tipo de objeto (Cliente), y después de que el uso de una corriente a filtrar todos los objetos donde contenta == false.

package com.company;

public class Customer {

    public String name;
    public int points;
    public boolean glad;

    public Customer(String name, int points, boolean glad) {
        this.name = name;
        this.points = points;
        this.glad = glad;
    }

    public boolean isGlad() {
        return this.glad;
    }
}

Siempre que intente hacerlo con una disposición regular, todo parece funcionar muy bien:

Customer kunde1 = new Customer("jens", 20, true);
Customer kunde2 = new Customer("marie", 20, false);
Customer kunde3 = new Customer("niels", 20, false);
Customer kunde4 = new Customer("jens", 20, true);
Customer kunde5 = new Customer("jens", 20, true);

Customer[] kunderne = {kunde1,kunde2,kunde3,kunde4,kunde5};

Customer[] filtered = Stream.of(kunderne)
    .filter(Customer::isGlad)
    .toArray(Customer[]::new);

Pero cada vez que intento crear la corriente de algo que no sea una matriz, como un ArrayList, no soy capaz de acceder a los atributos de los objetos dentro de mi declaración lambda

ArrayList<Customer> customers = new ArrayList<>();

Customer kunde1 = new Customer("jens", 20, true);
Customer kunde2 = new Customer("marie", 20, false);
Customer kunde3 = new Customer("niels", 20, false);
Customer kunde4 = new Customer("jens", 20, true);
Customer kunde5 = new Customer("jens", 20, true);

customers.add(kunde1);
customers.add(kunde2);
customers.add(kunde3);
customers.add(kunde4);
customers.add(kunde5);


Customer[] filtered = Stream.of(kunderne)
    .filter(Customer::isGlad)
    .toArray(Customer[]::new);

Sin embargo, este código no incluso correr. ¿Por qué sucede esto, y por qué sólo se parece al trabajo con matrices?

WJS:

Esto es lo que quería hacer.

      Customer[] filtered = Stream.of(kunderne).filter(Customer::isGlad).map(
            cust -> new Customer(cust.name, cust.points, cust.glad)).toArray(
                  Customer[]::new);

      for (Customer c : filtered) {
         System.out.println(c.name + " " + c.points + " " + c.glad);
      }

Necesitabas para mapear el cliente filtrada a un nuevo cliente y luego poner los de una matriz. Otra opción sería añadir un constructor que toma un cliente existente y lo utiliza como entrada. Aquí es cómo funcionaría.

      Customer[] filtered = Stream.of(kunderne).filter(Customer::isGlad).map(
            Customer::new).toArray(Customer[]::new);

      for (Customer c : filtered) {
         System.out.println(c.name + " " + c.points + " " + c.glad);
      }

     // modified customer class with additional constructor

    class Customer {
       public String  name;
       public int     points;
       public boolean glad;

       public Customer(String name, int points, boolean glad) {
          this.name = name;
          this.points = points;
          this.glad = glad;
       }

       public Customer(Customer cust) {
          this(cust.name, cust.points, cust.glad);
       }

       public boolean isGlad() {
          return this.glad;
       }
    } 

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=332866&siteId=1
Recomendado
Clasificación