使用FOR循环来捕获相同数字的倍数

时间:2010-01-27 15:33:02

标签: java jsp

我有一个String,它保存我正在解析为Integer的查询中的ID号的值。我需要一个FOR循环,每次查询中出现一个特定数字超过五次。我在JSP页面上显示此信息。 到目前为止,我有:

while (rs1.next()){
            String TicketNumber = rs1.getString("XXXXX_XXXXX_NO");
            String MUID = rs1.getString("XXXXXX_XXXX");
            String Name = rs1.getString("XXXXXXX_XXXXX_NAME");
            String LastName = rs1.getString("XXXXX_XXXX_NAME");
            int PIDM = Integer.parseInt(MUID);
       for ( int n = 0, n >= 5, n += 1 )

rs1是我正在查询的语句,我正在设置这些值,将MIUD解析为PIDM,但我不确定从那里开始。

2 个答案:

答案 0 :(得分:1)

只需使用SQL在该区域提供的强大的aggregate functions

SELECT muid, COUNT(muid) AS muid_count FROM ticket GROUP BY muid

结合使用
Integer muid = resultSet.getInt("muid");
Integer muidCount = resultSet.getInt("muid_count");

或者,如果您真的对非聚合信息感兴趣,那么最好使用Map<Integer, Integer>或更好Map<Integer, List<Ticket>>,以便您可以立即在JSP中显示它JSTL c:forEach。然后,您可以使用JSTL List<Ticket>获取fn:length的大小。

E.g。

<c:forEach items="${ticketMap}" var="ticketEntry">
    MUID: ${ticketEntry.key}<br>
    Ticket count: ${fn:length(ticketEntry.value)}<br>
    All tickets:<br>
    <c:forEach items="${ticketEntry.value}" var="ticket">
        Number: ${ticket.number}<br>
        Name: ${ticket.name}<br>
        Lastname: ${ticket.lastName}<br>
    </c:forEach>
    <hr>
</c:forEach>

答案 1 :(得分:0)

使用地图计算每个号码出现的次数。

Map<Integer,Integer> map = new HashMap<Integer,Integer>()

对结果集中的每条记录执行此操作

Integer count = map.get(PIDM);
if( count == null )
    map.put(PIDM, 1);
else
    map.put(PIDM, count + 1);

然后,在查询完成后,循环查找5或更大的计数

for( Map.Entry<Integer,Integer> e : map.entrySet() )
{
    if( e.getValue() > 5 )
    {
        // do something with e.getKey() which is the PIDM from above
    }
}