软件测试技术交流群 : 429183023

首先,举个例子:例如有一个List,另外一个是List,你现在要筛选出来自同一个家庭的丈夫和妻子,组成一个家庭的数据全集(一个家庭包含丈夫、妻子),这样就是吧数据赋值给另外一个List(这个例子可能不恰当,欢迎评论给出更好的例子);

说明:代码采用java8的Stream和Lambda处理List,如果对 Stream和 Lambda不太了解的,先查阅另外一篇文章: http://blog.csdn.net/qi_lin7/article/details/52958123

好吧,大家还是结合代码来看吧

Wife.java

text
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
import java.io.Serializable;

/**
 * Author: 
 * Date: 2016/11/23.
 * Time: 18:08
 */
public class Wife implements Serializable {
   private int id;
   /**妻子名字**/
   private String wifeName;
   /**家庭ID**/
   private String familyId;

   public Wife() {

   }

   public Wife(int id, String wifeName, String familyId) {
      this.id = id;
      this.wifeName = wifeName;
      this.familyId = familyId;
   }

   public int getId() {
      return id;
   }

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

   public String getWifeName() {
      return wifeName;
   }

   public void setWifeName(String wifeName) {
      this.wifeName = wifeName;
   }

   public String getFamilyId() {
      return familyId;
   }

   public void setFamilyId(String familyId) {
      this.familyId = familyId;
   }

   @Override
   public String toString() {
      return "";
   }
}

Husband.java

text
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
import java.io.Serializable;

/**
 * Author: 
 * Date: 2016/11/23.
 * Time: 18:08
 */
public class Husband implements Serializable {
   private int id;
   /**丈夫名字**/
   private String husbandName;
   /**家庭ID**/
   private String familyId;

   public int getId() {
      return id;
   }

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

   public Husband(){
      
   }

   public Husband(int id, String wifeName, String familyId) {
      this.id = id;
      this.husbandName = wifeName;
      this.familyId = familyId;
   }

   public String getHusbandName() {
      return husbandName;
   }

   public void setHusbandName(String husbandName) {
      this.husbandName = husbandName;
   }

   public String getFamilyId() {
      return familyId;
   }

   public void setFamilyId(String familyId) {
      this.familyId = familyId;
   }

   @Override
   public String toString() {
      return "";
   }
}

Family.java

text
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
import java.io.Serializable;

/**
 * Author: 
 * Date: 2016/11/23.
 * Time: 18:08
 */
public class Family implements Serializable {
   /**妻子名字**/
   private String wifeName;
   /**丈夫名字**/
   private String husbandName;
   /**家庭ID**/
   private String familyId;

   public String getWifeName() {
      return wifeName;
   }

   public void setWifeName(String wifeName) {
      this.wifeName = wifeName;
   }

   public String getHusbandName() {
      return husbandName;
   }

   public void setHusbandName(String husbandName) {
      this.husbandName = husbandName;
   }

   public String getFamilyId() {
      return familyId;
   }

   public void setFamilyId(String familyId) {
      this.familyId = familyId;
   }

   @Override
   public String toString() {
      return "";
   }
}

TestFamily.java

text
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
import com.xxx.bean.Family;
import com.xxx.bean.Husband;
import com.xxx.bean.Wife;
import com.google.common.collect.Lists;
import org.junit.Test;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * Author: 
 * Date: 2016/11/23.
 * Time: 18:17
 */
public class TestFamily {
   @Test
   public void familyTest() {
      List<Wife> wife = Lists.newArrayList();
      wife.add(new Wife(0, "我是张三的妻子", "0001"));
      wife.add(new Wife(0, "我是李四的妻子", "0002"));
      wife.add(new Wife(0, "我是王五的妻子", "0003"));

      List<Husband> husband = Lists.newArrayList();
      husband.add(new Husband(0, "我是张三", "0001"));
      husband.add(new Husband(0, "我是李四", "0002"));
      husband.add(new Husband(0, "我是王五", "0003"));

      List<Family> families = Lists.newArrayList();
      // 将list转为Map,这里key一定要为唯一值
      Map<String, Wife> wifeMap = wife.stream().collect(
            Collectors.toMap(w -> w.getFamilyId(),
                  w -> w));
      // 匹配家庭
      families = husband.stream().map(h -> {
         return toFamily(wifeMap.get(h.getFamilyId()), h);
      }).collect(Collectors.toList());

      families.stream().forEach(family -> {
         System.out.println("家庭ID:" + family.getFamilyId() + ",丈夫:" + family.getHusbandName() + ",妻子:" + family.getWifeName());
      });
   }

   private Family toFamily(Wife wife, Husband husband) {
      Family family = new Family();
      family.setFamilyId(wife.getFamilyId());
      family.setHusbandName(husband.getHusbandName());
      family.setWifeName(wife.getWifeName());
      return family;
   }
}

最后输出结果:

text
1
家庭ID:0001,丈夫:我是张三,妻子:我是张三的妻子 

家庭ID:0002,丈夫:我是李四,妻子:我是李四的妻子

家庭ID:0003,丈夫:我是王五,妻子:我是王五的妻子

这种处理办法,可以将处理此类问题的循环次数由NN,变为2N

如果不理解或者有更好的解决办法处理此类问题的

原文地址:https://blog.csdn.net/qi_lin7/article/details/53318067?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168474999716782427485144%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=168474999716782427485144&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-23-53318067-null-null.142^v87^insert_down1,239^v2^insert_chatgpt&utm_term=java%E4%BC%98%E5%8C%96