左の2つのリストにJavaストリームを使用して参加します

Nilesh Chauhan:

間に合わメインクラスの休憩た記述ここでは、クラスの説明のためのイメージである私は、CID、CNAMEや援助や援助、都市と州と他のエンティティのアドレスを持つエンティティの顧客を持っています。

私は-listと、リスト2つの異なるリスト内のエンティティの両方のデータをとっています。私は結果リストのタイプがどうあるべきか、さらにJavaのストリームAPIまたはJava 8のいずれかの他の機能を使用して、リストの両方からのデータが含まれており、結果リストを(左、顧客とアドレスの両方に参加)したいですか。?

それはそうすることが可能ですか。?

助けてください。

前もって感謝します。


パブリッククラスお客様{

private Integer cid;
private String name;
private Integer aid;
// getters and setters
// tostring()
// constructors with and without params

パブリッククラスAddress {

private Integer aid;
private String city;
private String state;
private Integer pincode;
//getters and setters
//tostring()
//constructors with and without params

パブリッククラスCust_Add_DTO {

private Integer cid;
private String name;
private Integer aid;
private String city;
private String state;
private Integer pincode;
// getters and setters
// tostring()
// constructors with and without params

パブリッククラスDemoMain {

public static void main(String[] args) {

    List<Customers> customers = new ArrayList<Customers>();
    List<Address> addresses = new ArrayList<Address>();
    customers.add(new Customers(1, "abc1", 123));
    customers.add(new Customers(2, "abc2", 124));
    customers.add(new Customers(3, "abc3", 125));
    customers.add(new Customers(4, "abc4", 126));
    customers.add(new Customers(5, "abc5", 127));

    addresses.add(new Address(123, "bangalore", "karnataka", 101010));
    addresses.add(new Address(125, "chennai", "tamil nadu", 202020));
    addresses.add(new Address(127, "hyderabad", "telanagana", 303030));

    List<Cust_Add_DTO> mergerdleftjoin = customers.stream()
            .flatMap(x -> addresses.stream().filter(y -> x.getAid().equals(y.getAid())))
            .map(y -> new Cust_Add_DTO(x.getCid(), y.getAid(), y.getCity(), y.getPincode(), y.getState(),
                    x.getName()))
            .collect(Collectors.toList());
oleg.cherednik:

私はあなたがDBからの2つのエンティティのリストを持っていることを確認できます。

// @Entity
class Customers {

    private int cid;
    private String name;
    private int aid;
}

// @Entity
class Address {

    private int aid;
    private String city;
    private String state;
}

これは、DTOからスプリットDAO層エンティティに良いでしょう。あなたが必要なDTOを作成する必要がありそう。

class CustomerDTO {

    private int cid;
    private String name;
    private AddressDTO address;
}

class AddressDTO {

    private int aid;
    private String city;
    private String state;
}

今、あなたは書くこと準備ができているleftJoin使用方法をStreams

public static List<CustomerDTO> leftJoin(List<Customers> customers, List<Address> addresses) {
    Map<Integer, Address> aidAddress = addresses.stream().collect(Collectors.toMap(Address::getAid, Function.identity()));

    return customers.stream()
                    .map(customer -> {
                        CustomerDTO customerDto = new CustomerDTO();
                        // set all fields from customer -> customerDto

                        Address address = aidAddress.get(customer.getAid());

                        if (address != null) {
                            AddressDTO addressDto = new AddressDTO();
                            // set all fields from address -> addressDto
                            customerDto.setAddress(addressDto);
                        }

                        return customerDto;
                    })
                    .collect(Collectors.toList());
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=336456&siteId=1