简体   繁体   English

如何在JSONArray中存储唯一元素

[英]How to store unique elements inside a JSONArray

I am trying to store only unique elements fetched from Database inside a JSONArray 我正在尝试仅将从数据库中获取的唯一元素存储在JSONArray中

HashSet<String> hs = new HashSet<String>();
JSONArray mainarray=new JSONArray();

PreparedStatement stmt = connection.prepareStatement("SELECT * from categories");
ResultSet rs=stmt.executeQuery();

while(rs.next())
{
    String T1 = rs.getString("T1");
    hs.add(T1);
    if(!hs.contains(T1))
    {
        mainarray.put(T1);
    }
}


System.out.println(mainarray); 

Starngely the output is an empty array [] 绝对输出是一个空数组[]

By the way i am using org.json.JSONArray . 顺便说一下,我正在使用org.json.JSONArray

Could anybody please help . 任何人都可以帮忙。

 hs.add(T1);
 if(!hs.contains(T1)) { ...

The condition will always be false ... because you just added the element! 条件将始终为假...因为您刚刚添加了元素!

Therefore you will never add anything to mainarray . 因此,您绝不会在mainarray添加任何mainarray


For what it is worth, here's a fix for your bug: 对于它的价值,这里有一个针对您的错误的修复程序:

// Inelegant version
if (!hs.contains(T1)) {
    hs.add(T1);
    mainarray.put(T1);
}

// Elegant version that avoids two probes of the hashset
// ... see javadocs for `Set.add` to understand why this works.
if (hs.add(T1)) {
    mainarray.put(T1);
}

Tweak your query and you need not handle duplicates in Java code. 调整查询,您无需处理Java代码中的重复项。

JSONArray mainarray=new JSONArray();

PreparedStatement stmt = connection.prepareStatement("SELECT DISTINCT T1 from categories");
ResultSet rs=stmt.executeQuery();

while(rs.next()) {
    String T1 = rs.getString("T1");
    mainarray.put(T1);
}
System.out.println(mainarray); 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM