1
1

More than 3 years have passed since last update.

2つのEntityでのやり取りで簡単そうなのに意外と難しかったやつメモ

Posted at

難しいというか長かった

完全に備忘録です

モデルが2個あって
PKがかぶってるデータを排除して
のこったデータをリストとして保持する

package test;

public class Models {
    class Model1 {
        private String id;
        private String name;

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }

    class Model2 {
        private String id;
        private String name;

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
}

package test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

import test.Models.Model1;
import test.Models.Model2;

/**
 * test
 *
 * @author me
 *
 */
public class Test2 {

    /**
     * main
     * @param args
     */
    public static void main(String[] args) {
        distinct();
    }

    /**
     * モデルからPKかぶりを排除するやつ
     */
    private static void distinct() {
        Models models = new Models();
        List<Model1> list1 = Collections.synchronizedList(new ArrayList<Model1>());
        List<Model2> list2 = Collections.synchronizedList(new ArrayList<Model2>());
        Models.Model1 model1 = models.new Model1();
        model1.setId("1");
        model1.setName("asdasdasdas");
        list1.add(model1);
        Models.Model1 model11 = models.new Model1();
        model11.setId("2");
        model11.setName("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
        list1.add(model11);
        Models.Model2 model2 = models.new Model2();
        model2.setId("1");
        list2.add(model2);
        Models.Model2 model22 = models.new Model2();
        model22.setId("2");
        list2.add(model22);
        Models.Model2 model222 = models.new Model2();
        model222.setId("3");
        list2.add(model222);

        /** -----本機能----- */
        // list2とPKがかぶっているものを排除したlist1のPKリスト
        List<String> uniKeyList = list1.stream().map(data1 -> data1.getId())
                .filter(key1 -> list2.stream().map(data2 -> data2.getId()).anyMatch(key2 -> key1.equals(key2)))
                .collect(Collectors.toList());
        // list1をuniKeyListで検索
        List<Model1> uniData = list1.stream()
                .filter(data -> uniKeyList.stream().anyMatch(key -> data.getId().equals(key)))
                .collect(Collectors.toList());
        System.out.println(uniData);

    }

}

まずかぶりのないPKだけのリストを作り

もとのモデルのリストから、検索して

かぶりPKのデータをなくす、というステップを踏みました

絶対無駄が多い...もっとスマートにできるはずなのでは

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1