簡體   English   中英

如何檢查一個列表的 object 是否包含另一個列表的任何 object

[英]How to check if an object of one list contains any object of another list

我們有兩個列表,一個是 Question 類型,另一個是 Tag 類型。

問題 class 具有這些屬性

private String id;
private String header;
private String content;
private List<Tag> tags;
private Long timeStamp;

問題列表中包含所有問題,標簽列表中包含所有標簽。 我們想檢查一個問題是否包含標簽列表的任何標簽。 我想對所有問題都這樣做。

使用 question.getTags,我得到了標簽列表。

標簽 class 有一個稱為計數器的屬性。

我將給出一些偽代碼來實際向您展示我想要做什么

List<Tag> allTags = ...
List<Question> allQuestions = ...
Map<Tag,Integer> map = new Hashmap<>();

if(one question contains any tag of allTags) {
     tag.setCounter(counter+1);
     map.put(tag,tag.getCounter);
}

最后,我想要一個 map,其中鍵是標簽,值是該標簽的計數器。

我怎么能做到這一點?

編輯這里是我的 Tag.java

@NoArgsConstructor
@Data
@Getter
@AllArgsConstructor
@Setter
@Document(collection = "tag")
public class Tag {
    private String id;
    private String name;
    private Long timeStamp;

public Tag(String name) {
        this.id = UUID.randomUUID().toString();
        this.name = name;
        this.timeStamp = Instant.now().getEpochSecond()*1000;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Tag tag = (Tag) o;
        return Objects.equals(getId(), tag.getId());
    }

    @Override
    public int hashCode() {
        return Objects.hash(getId());
    }
}

我認為Tag class 中的計數器屬性用於計算Tagquestions列表中出現的頻率是設計錯誤。 那里不需要這樣的櫃台。

一個可能合理的例子:假設你有一個 class Student和一個 class Course 要跟蹤課程中有多少學生, Student class 中不需要計數器。 同樣,class Tag應該只包含標簽的屬性。 也就是說,您可以使用以下兩種方法之一在沒有計數器的情況下實現您的目標(前提是您有 java 8 或更高版本,並且您的Tag class 覆蓋了equalshashcode方法):

方法 1 使用Streams & Collectors.groupingBy

Map<Tag,Long> map = allQuestions.stream()
            .flatMap(q -> q.getTags().stream())
            .filter(allTags::contains)
            .collect(Collectors.groupingBy(Function.identity(),Collectors.counting()));

方法 2 使用List.forEach & Map.compute

Map<Tag, Integer> map2 = new HashMap<>();
    allQuestions.forEach(q -> {
        q.getTags()
                .stream()
                .filter(allTags::contains)
                .forEach(t -> map2.compute(t, (k, v) -> v == null ? 1 : v + 1));
    });

或者使用傳統for-loopif-else

Map<Tag, Integer> map3 = new HashMap<>();

for (Question q : allQuestions) {
    for (Tag t : q.getTags()) {
        if (allTags.contains(t)) {
            if (map3.containsKey(t)) {
                map3.put(t, map3.get(t) + 1);
            } else {
                map3.put(t, 1);
            }
        }
    }
}

我認為這將完美地工作

    int count=0; 
    for(Question q : allQuestions){
     for(Tag t : q.getTags()){
     if(allTags.contains(t)){ 
        count=map.containsKey(t) ? map.get(t)+1 : 0;
        map.put(t,count);
       }
     }
    }

如何檢查列表中 Object 的任何 null 字段<object> ?<div id="text_translate"><p> 我有一個 Object 列表傳遞給如下方法。</p><pre class="lang-java prettyprint-override"> Student s = new Student (name,age,branch, year); // student prototype public void log(List&lt;Student&gt; items) { }</pre><p> 在該方法中,我需要檢查每個學生 object 中的任何null值並記錄該特定屬性,即 null 和相應的學生 ZA8CFDE63131AC4BEB6268CFDE63131AC4BEB8 除了使用之外,還有其他方法可以檢查嗎?:</p><pre class="lang-java prettyprint-override"> items.stream().anyMatch(item -&gt; item.getAge() == null? System.out.println());</pre><p> 在實際場景中,我的 object 包含 30 多個屬性,如果任何一個屬性是 null,我想記錄 null 屬性及其對應的 ZA8CFFDE8911AC</p></div></object>

[英]How to check for any null field of Object in List<Object>?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 檢查對象列表是否包含Java中的另一個對象 檢查清單 <Object> 包含一個屬性 檢查列表是否包含至少一個非null對象 如何使用lambda或流從包含另一個對象列表的對象列表中迭代和獲取對象 Java 流過一個列表並檢查列表是否在列表中包含具有三個給定字段值之一的對象 檢查列表是否至少包含另一個 - 枚舉 如何檢查列表中 Object 的任何 null 字段<object> ?<div id="text_translate"><p> 我有一個 Object 列表傳遞給如下方法。</p><pre class="lang-java prettyprint-override"> Student s = new Student (name,age,branch, year); // student prototype public void log(List&lt;Student&gt; items) { }</pre><p> 在該方法中,我需要檢查每個學生 object 中的任何null值並記錄該特定屬性,即 null 和相應的學生 ZA8CFDE63131AC4BEB6268CFDE63131AC4BEB8 除了使用之外,還有其他方法可以檢查嗎?:</p><pre class="lang-java prettyprint-override"> items.stream().anyMatch(item -&gt; item.getAge() == null? System.out.println());</pre><p> 在實際場景中,我的 object 包含 30 多個屬性,如果任何一個屬性是 null,我想記錄 null 屬性及其對應的 ZA8CFFDE8911AC</p></div></object> 檢查對象是否是任何一個類列表的實例(Android) 檢查List <?>包含的對象類型 檢查列表是否包含 java 中另一個列表的任何項目
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM