java使用stream流将List<String>变为count( A ) as cnt01,count( B ) as cnt02
时间: 2024-09-21 13:13:11 浏览: 57
在Java中,你可以使用`Stream` API来处理集合,并通过`Collectors.groupingBy()`方法对元素进行分类计数。如果你想统计`List<String>`中A和B的出现次数,假设这里A和B是你关心的两个特定值,你可以这样做:
```java
List<String> list = ... // 假设这是你要操作的列表
Map<String, Long> counts = list.stream()
.collect(Collectors.groupingBy(s -> s.equals("A") ? "cnt01" : "cnt02",
Collectors.counting()));
```
上述代码创建了一个`Map`,键为`"cnt01"`或`"cnt02"`,值为对应字符串类型的元素在列表中的出现次数。如果`s`是"A",那么它会被归到`"cnt01"`组,否则归到`"cnt02"`组。
现在,`counts.get("cnt01")`将返回A出现的次数,`counts.get("cnt02")`将返回B出现的次数。
相关问题
改进以下代码#include<iostream> #include<string.h> #include<stdio.h> using namespace std; //链表类的前向声明 template<class T> class list; template<class T> //声明模板 class node { //定义结构模板0-[-[ T val; //val取任意类型,即模板参数类型 node<T>* next; //此处node为结构模板 public: node(){ next = NULL; } node(T a) { val = a; next = NULL; } friend class list<T>; }; //请完成链表类的设计 template<class T> class list { public: list(){} void insert(T t) { if(pFirst==NULL) { pFirst=new node(t); pTail=pFirst; } else { node<T> *p=new node(t); pTail->next=p; pTail=p; } } void print() { for(node<T> *p=pFirst;p;p=p->next) cout<<p->val; } private: static node<T> pFirst; static node<T> pTail; }; template <class T> node<T> list<T>::pFirst=NULL; template <class T> node<T> list<T>::pTail=NULL; int main() { int kind = 0; // 0:表示整型,1:单精度浮点数, 2:字符串 int cnt = 0; cin >> kind >> cnt; //整数链表 if (kind == 0) { list<int> intlist; int nTemp = 0; for (int i = 0; i < cnt; i++) { cin >> nTemp; intlist.insert(nTemp); } intlist.print(); } //浮点数链表 else if (kind == 1){ list<float> floatlist; float fTemp = 0; cout.setf(ios::fixed); cout.precision(1); for (int i = 0; i < cnt; i++) { cin >> fTemp; floatlist.insert(fTemp); } floatlist.print(); } //字符串链表 else if (kind == 2){ list<string> charlist; char temp[100] ; for (int i = 0; i < cnt; i++){ cin >> temp; charlist.insert(temp); } charlist.print(); } else cout << "error"; return 0; }
以下是改进后的代码:
```
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
template<class T>
class Node {
public:
T val;
Node<T>* next;
Node() {
next = NULL;
}
Node(T a) {
val = a;
next = NULL;
}
friend class List<T>;
};
template<class T>
class List {
private:
Node<T>* pFirst;
Node<T>* pTail;
public:
List() {
pFirst = NULL;
pTail = NULL;
}
void insert(T t) {
Node<T>* p = new Node<T>(t);
if (pFirst == NULL) {
pFirst = p;
pTail = pFirst;
}
else {
pTail->next = p;
pTail = p;
}
}
void print() {
for (Node<T>* p = pFirst; p != NULL; p = p->next) {
cout << p->val << " ";
}
}
};
int main() {
int kind = 0; // 0:表示整型,1:单精度浮点数, 2:字符串
int cnt = 0;
cin >> kind >> cnt;
//整数链表
if (kind == 0) {
List<int> intList;
int nTemp = 0;
for (int i = 0; i < cnt; i++) {
cin >> nTemp;
intList.insert(nTemp);
}
intList.print();
}
//浮点数链表
else if (kind == 1) {
List<float> floatList;
float fTemp = 0;
cout.setf(ios::fixed);
cout.precision(1);
for (int i = 0; i < cnt; i++) {
cin >> fTemp;
floatList.insert(fTemp);
}
floatList.print();
}
//字符串链表
else if (kind == 2) {
List<string> stringList;
string temp;
for (int i = 0; i < cnt; i++) {
cin >> temp;
stringList.insert(temp);
}
stringList.print();
}
else
cout << "error";
return 0;
}
```
改进说明:
1. 将链表节点的定义和链表的定义分开,使代码更加清晰易懂;
2. 在链表类中增加私有成员变量pFirst和pTail,用于指向链表的头和尾;
3. 在链表类的构造函数中初始化pFirst和pTail为NULL;
4. 修改了链表的insert方法,使其可以正确处理插入第一个节点的情况;
5. 修改了链表的print方法,使其可以正确处理链表为空的情况;
6. 修改了字符串链表的输入方式,使用string类型代替char数组类型,更加方便易用。
用string写1142:单词的长度别用#include <unordered_map>和#include <string>
好的,这是用 C++ 的 string 类写的 1142 题的代码,不用 `<unordered_map>` 和 `<string>` 库:
```c++
#include <iostream>
using namespace std;
const int MAXN = 1000; // 单词的最大长度
int cnt[MAXN + 1]; // 记录不同长度单词的出现次数
int main() {
char str[MAXN + 1];
cin.getline(str, MAXN + 1); // 输入字符串
int i = 0;
while (str[i] != '\0') {
int len = 0;
while (str[i] != '\0' && str[i] != ' ') {
len++;
i++;
}
if (len != 0) {
cnt[len]++;
}
if (str[i] == ' ') {
i++;
}
}
for (int i = 1; i <= MAXN; i++) {
if (cnt[i] != 0) {
cout << i << ": " << cnt[i] << endl;
}
}
return 0;
}
```
这个程序和之前的程序类似,不同之处在于使用一个字符数组来存储输入的字符串,而不是使用 `string`,同时也不使用 `unordered_map`。我们假设单词的最大长度为 `MAXN`,则可以定义一个长度为 `MAXN+1` 的数组 `cnt`,`cnt[i]` 表示长度为 `i` 的单词出现的次数。在读取单词时,如果单词的长度为 `len`,则将 `cnt[len]++`。最后遍历数组,输出不同长度的出现次数。注意,这里使用 `cin.getline()` 函数读入字符串,而不是 `getline()`。
阅读全文