我是溪流及其工作方式的新手,我正试图让列表中添加的特定对象出现。
我找到了一种使用Collections
执行此操作的方法。它如下:
for (int i = 0; i < countries.size(); i++) {
int occurrences = Collections.frequency(countries, countries.get(i));
}
但我想使用流。 我与流一起使用的方法是:
countries.parallelStream().filter(p -> p.contentEquals(countries.get(countries.size()-1))).count()
这只返回当前对象及其出现次数,而我希望 all 对象及其出现次数。
编辑:
`private final ArrayList<String> countries = new ArrayList<>();
dataset.setValue(countries.parallelStream()
.filter(p -> p.contentEquals(countries.get(countries.size()-1)) )
.count(),
"",
countries.get(countries.size()-1)); //sets the graph for the given country
@Override
public void addCountries(String country) {
countries.add(country);
}
@Override
public void removeCountries(int country) {
countries.remove(country);
}`
我正在制作图表。 dataset.setValue()的第一个陈述是国家/地区的出现次数。必须为每个国家/地区执行此操作,以便您可以查看某个国家/地区的出现次数。希望这有帮助
编辑2:已解决!
countries.stream().distinct().forEach(o ->
dataset.setValue(Collections.frequency(countries, o),
"",
o)); //sets the graph for the given country
答案 0 :(得分:3)
您还可以使用分组收集器:
Collection<Integer> collection = Arrays.asList(1, 2, 1, 4, 2);
final Map<Integer, Long> map = collection.stream().collect(
Collectors.groupingBy(el -> el, Collectors.counting()));
System.out.println(map);
这会产生
{1=2, 2=2, 4=1}
答案 1 :(得分:0)
你可以这样做:
List<Integer> lista = new ArrayList<>(Arrays.asList(1,2,3,3,2,1,5,4,1,2,3));
lista.stream().distinct().forEach(o -> System.out.println(o + " occures " + Collections.frequency(lista, o) + " times in a list !"));
输出:
1在列表中出现3次!
2在列表中出现3次!
3在列表中出现3次!
5在列表中出现1次!
4在列表中出现1次!
简而言之:
我们从列表中创建流,我们使用.distinct()从流中删除重复项,现在当我们从列表中留下唯一元素时,我们使用Collections.frequency打印出每个元素出现的次数在列表中。