从LinkedHashSet中获取前5个值的方法是什么?

4

我有一个LinkedHashSet,其中包含多个数值。

LinkedHashSet<String> lhs = new LinkedHashSet<String>();

我想遍历值集合并从存储在该集合中的项目数量中显示前5个值。我使用了for循环来遍历值并显示数据,如下所示:

for (String sent : lhs) {        
    text.append(sent);                                          
}

该代码输出了LinkedHashSet中存储的所有值。为了仅获取集合中的前5个值,我需要对代码进行哪些修改?

控制循环的 int 变量,经过 5 次迭代后如何中断循环? - Arrvi
这取决于您使用的Java版本...在Java 7中,解决方案与Java 8+大不相同。此外,您说您想要前5个值:在哪里?集合,数组? - fge
@fge Android 使用 Java 7。 - Mussa
@Mussa 不,它没有。据我所知,Android仍然没有任何可行的JSR 203或JSR 292实现。 - fge
你能定义一下“values”吗?你在某个“text”上使用了.append(),但是并没有说明这个“text”是什么... - fge
4个回答

6
您可以获得您的集合 Iterator
Iterator<String> it = yourSet.iterator();

并移动到next()元素N次(假设它仍然有hasNext()元素)

int counter = 0;
while(it.hasNext() && counter++ < N){
    String element = it.next();
    ...
}

1
我会把它写成一个“for”循环。 - Arrvi
@Arrvi 嗯,那真的是一个观点问题。 - Tunaki
@Arrvi 为什么?这最终对最终结果没有影响。 - fge
嗯,for循环只是说while循环的一种花哨的方式。 :P - ifly6
它“隐藏”了 counter 变量。 - Arrvi

5
int i = 0;
for (String sentences : lhs) {       
    if (i > 4) break; 
    text.append(sentences);
    i++;
}

非常感谢,它完美地运行。这正是我试图找出的解决方案类型。 - coder
@程序员,如果输入集合的元素数量比您期望的要少,那么应该发生什么? - fge
@fge,它仍然可以工作,因为它只有在大于4时才停止。 - coder
1
@fge 如果 i 大于 4 或者 lhs 的项目用完了,它就会停止。 - Mussa

5
如果您使用的是Java8,我建议您尝试以下方法:
yourLinkedHashSet
    .stream()
    .limit(5)
    .forEachOrdered(text::append);

解释:

  • stream() 会从集合中一个接一个地获取字符串
  • limit(5) 在处理完五个元素后停止计算
  • forEachOrdered(...) 依次为每个项执行操作
  • text::append 是每个项要执行的操作

谢谢。@slartidian 为什么不用forEach呢? - undefined
@Khanna111 对我来说,流式语法更能体现出意图。对我来说,它更容易阅读和理解。然而,我也意识到这是主观的,对其他人可能会有所不同。 - undefined
抱歉不清楚。我的意思是为什么要使用forEachOrdered而不是forEach? - undefined

0

您可以使用subList而无需计数器声明

  Iterator<String> iter = new ArrayList<>(lhs).subList(5, lhs.size())
    .iterator();
  while (iter.hasNext()) {
    text.append(iter.next());
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接