最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java使用stream判斷兩個(gè)list元素的屬性并輸出方式

 更新時(shí)間:2022年06月07日 16:48:08   作者:enjoy囂士  
這篇文章主要介紹了java使用stream判斷兩個(gè)list元素的屬性并輸出方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

使用stream判斷兩個(gè)list元素的屬性并輸出

/**
* 使用stream判斷兩個(gè)list中元素不同的item
*/
@Test
public void test1(){
List<Param> stringList1 = new LinkedList<Param>(){{
    add(new Param(1,"1111"));
    add(new Param(2, "2222"));
    add(new Param(3, "3333"));
}};
List<Param> stringList2 = new LinkedList<Param>(){{
    add(new Param(1,"1111"));
    add(new Param(2, "4444"));
    add(new Param(3, "5555"));
}};
// 判斷key相同,value相同的元素
Map<Integer, String> tmpList2 = stringList2.stream().collect(Collectors.toMap(Param::getId, Param::getName));
var tmplist = stringList1.stream().filter(item -> (tmpList2.get(item.getId()) != null && tmpList2.get(item.getId()).equals(item.getName()))).collect(Collectors.toList());
System.out.println(tmplist);
}
@Setter
@Getter
@ToString
@AllArgsConstructor
public static class Param{
private Integer id;
private String name;
}
/**
 * 使用stream判斷兩個(gè)list中元素不同的item
 */
@Test
public void test1(){
    List<Param> stringList1 = new LinkedList<Param>(){{
        add(new Param(1,"1111", "b"));
        add(new Param(2, "2222", "c"));
        add(new Param(3, "3333", "a"));
    }};
    List<Param> stringList2 = new LinkedList<Param>(){{
        add(new Param(1,"1111", "c"));
        add(new Param(2, "4444", "b"));
        add(new Param(3, "5555", "a"));
    }};
   // 判斷key相同,value相同的元素
   Map<Integer, String> tmpList2 = stringList2.stream().collect(Collectors.toMap(Param::getId, Param::getName));
   var tmplist = stringList1.stream().filter(item -> (tmpList2.get(item.getId()) != null && tmpList2.get(item.getId()).equals(item.getName()))).collect(Collectors.toList());
   System.out.println(tmplist);
   // 如果需要判斷多個(gè)值,直接將對(duì)象加入進(jìn)去
   Map<Integer, Param> tmpList3 = stringList2.stream().collect(Collectors.toMap(Param::getId, Function.identity()));
   var tmplist2 = stringList1.stream().filter(item -> (tmpList3.get(item.getId()) != null && tmpList3.get(item.getId()).getType().equals(item.getType()))).collect(Collectors.toList());
   System.out.println(tmplist2);
}
@Setter
@Getter
@ToString
@AllArgsConstructor
@EqualsAndHashCode
public static class Param{
    private Integer id;
    private String name;
    private String type;
}

stream判斷列表是否包含某幾個(gè)元素/重復(fù)元素

(需求經(jīng)過(guò)修改過(guò))判斷一個(gè)profile是否包含PROFILE-IN-A和PROFILE-IN-B且都是Enable=1打勾的.

既然已經(jīng)JDK8了,那就用lambda吧,如果是foreach可能比較難處理,用stream的filter則可以這樣做.

核心代碼可以這么寫(xiě)

int intCheck = profileServiceDtoList.stream().filter(e ->
? ? ? ? ? ? "1".equals(e.getEnable())
? ? ? ? ? ? &&(("PROFILE-IN-MOSHOW".equals(e.getServiceIdentifier()))||("PROFILE-IN-ADC".equals(e.getServiceIdentifier()))) ?
? ? ).collect(Collectors.toList()).size();

代碼SHOW

  1. 新建三個(gè)不同類型的profile,其中兩個(gè)是要判斷的,一個(gè)是干擾的.
  2. 通過(guò)steam進(jìn)行filter,找出是否包含這兩個(gè)元素(相當(dāng)于把要判斷的元素過(guò)濾進(jìn)去)
  3. 判斷l(xiāng)ist的size大小(intCheck>1找到兩個(gè)則代表同時(shí)出現(xiàn))
public static void main(String[] args) {
? ? List<ProfileServiceDto> profileServiceDtoList= new ArrayList<>(3);
?? ?
? ? ProfileServiceDto profileService1 = new ProfileServiceDto();
? ? profileService1.setServiceId(1001L);
? ? profileService1.setServiceIdentifier("PROFILE-IN-MOSHOW");
? ? profileService1.setEnable("1");
? ? profileServiceDtoList.add(profileService1);
? ? ProfileServiceDto profileService2 = new ProfileServiceDto();
? ? profileService2.setServiceId(1002L);
? ? profileService2.setServiceIdentifier("PROFILE-IN-ADC");
? ? profileService2.setEnable("1");
? ? profileServiceDtoList.add(profileService2);
? ? ProfileServiceDto profileService3 = new ProfileServiceDto();
? ? profileService3.setServiceId(1003L);
? ? profileService3.setServiceIdentifier("PROFILE-XXX-ABC");
? ? profileService3.setEnable("1");
? ? profileServiceDtoList.add(profileService3);
? ? int intCheck = profileServiceDtoList.stream().filter(e ->
? ? ? ? ? ? "1".equals(e.getEnable())&&(("PROFILE-IN-MOSHOW".equals(e.getServiceIdentifier()))||("PROFILE-IN-ADC".equals(e.getServiceIdentifier())))
? ? ).collect(Collectors.toList()).size();
? ? System.out.println("intCheck->"+intCheck);
?? ?
?? ?if(intCheck>1){
?? ??? ?System.error.println("In one profile, cannot contain two more PROFILE-IN profile.");
?? ?}
}

Java stream判斷列表是否包含重復(fù)元素

思路是通過(guò)一個(gè)distinct的list,然后跟原先的list來(lái)判斷大小,如果不一致(原先list.size>distinctList.size)則表示有重復(fù)元素

?? ??? ?//profileServiceDtoList路上,不累贅
?? ??? ?//多了一個(gè)profileService1.setGroupId("A");profileService1.setGroupId("B");profileService3.setGroupId("A");
?? ??? ?List<String> groupList = new ArrayList<>(4);
? ? ? ? profileServiceDtoList.stream().forEach(e -> {
? ? ? ? ? ? if ("Y".equals(e.getEnable()) && StringUtils.isNotEmpty(e.getGroupId())) {
? ? ? ? ? ? ? ? groupList.add(e.getGroupId());
? ? ? ? ? ? }
? ? ? ? });
? ? ? ? int distinctGroupSize = groupList.stream().distinct().collect(Collectors.toList()).size();
? ? ? ? if (groupList.size() > distinctGroupSize) {
? ? ? ? ? ? throw new ValidationException("100001","In one profile, the services with the same groupId cannot co-exist.");
? ? ? ? }

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。 

相關(guān)文章

最新評(píng)論

灵寿县| 金华市| 正镶白旗| 海伦市| 互助| 建宁县| 靖边县| 田阳县| 乌什县| 大化| 治县。| 孝感市| 临城县| 襄樊市| 营山县| 永寿县| 永宁县| 昭平县| 开江县| 西畴县| 佳木斯市| 焦作市| 永春县| 公主岭市| 胶南市| 东安县| 东阳市| 且末县| 镇雄县| 邻水| 赣榆县| 湾仔区| 东平县| 阳东县| 辽阳县| 尖扎县| 类乌齐县| 丹棱县| 怀宁县| 伊宁市| 仙居县|