如何比较两个包含共享属性的对象的arraylist

时间:2019-05-15 01:43:24

标签: java arraylist collections core

如何比较两个包含共享属性的对象的数组列表。

例如:我有一个pojo类Abc

Class Abc {
String dataString ;
int rowNum;
......
}

Abc list1 contains - 2000 records & more sometimes
Abc list2 contains - 60 records & more sometimes

我想将list1数据字符串与list2数据字符串进行比较并返回rownum  如果list1.dataString注意等于list2.dataString

如果数据字符串不匹配,我需要List1的rowNumber。 List2 Rownum可以忽略。

2 个答案:

答案 0 :(得分:2)

从高级的角度讲,您的代码应:

  • 遍历list1
  • 对于每个元素,检查其数据字符串是否出现在list2中的某个地方
  • 如果是,则在结果中包括list1元素的行号

为使代码快速,可以在第二步中预先计算list2数据字符串集。仍然是高级术语,代码是:

const saveFile = (base64) => {
  const albumPath = `${RNFS.PicturesDirectoryPath}/${APP_NAME}`;

  const fileName = `${new Date().getTime()}.png`;
  const filePathInCache = `${RNFS.CachesDirectoryPath}/${fileName}`;
  const filePathInAlbum = `${albumPath}/${fileName}`;

  return RNFS.mkdir(albumPath)
    .then(() => {
      RNFS.writeFile(filePathInCache, base64, 'base64').then(() => RNFS.copyFile(filePathInCache, filePathInAlbum)
      // Next step to show album without the need to re-boot your device:
        .then(() => RNFS.scanFile(filePathInAlbum))
        .then(() => {
          console.log('File Saved Successfully!');
        }));
    })
    .catch((error) => {
      console.log('Could not create dir', error);
    });
};

在标准Java中,代码看起来更肿,当然:

List<int> filtered(List<Abc> list1, List<Abc> list2) {
    var dataStrings = setOf(list2.map(x -> x.dataString));

    var abcs = list1.filter(x -> dataStrings.contains(x.dataString));

    return abcs.map(x -> x.rowNum);
}

答案 1 :(得分:0)

如果在这种情况下,您有两个不同的列表并想要进行比较,那么一种简单的实现方式可以是两个具有相等条件的foreach循环,然后具有值:

for(Abc list1Obj : list1)
{
      for(Abc list2Obj : list2)
      {
          if(list1.dataString.Equals(list2.dataString))
          {
              int value = Integer.parseInt(list1.rowNumber);
          }
      }
}

在这种情况下,它将对list1中的每个项目与list2中的每个项目进行比较。