Java:计算数组列表中的字符出现次数

问题描述

我正在尝试找到一种方法,将数组列表中的字符及其值相加。

我拥有的列表是 = import React from "react"; import { createStackNavigator } from "@react-navigation/stack"; import SignUp from "./screens/SignupScreen"; import LoginScreen from "./screens/LoginScreen"; import LoadingScreen from "./screens/LoadingScreen"; import HomeScreen from "./screens/HomeScreen"; const Stack = createStackNavigator(); function AppNavigator() { return ( <Stack.Navigator> <Stack.Screen name="signup" component={SignUp}></Stack.Screen> <Stack.Screen name="login" component={LoginScreen}></Stack.Screen> </Stack.Navigator> ); } export default AppNavigator;

可以使用正则表达式模式和正则表达式匹配器以这种方式返回数组列表。我试图让它看起来像这样:

[A,Q3,Q,Z2,B2,C2,B4]

亲切的问候

解决方法

var in = List.of("A","Q3","Q","Z2","B2","C2","B4");

Map<String,Integer> values =
 in.stream().collect(Collectors.toMap(
   s -> s.substring(0,1),s -> s.length() == 1 ? 1 : Integer.parseInt(s.substring(1)),(a,b) -> a + b,() -> new TreeMap<>()));

System.out.println(values);

> {A=1,B=6,C=2,Q=4,Z=2}

逐个:

in.stream() - 我们想使用流 API 来修改列表的内容

.collect - 我们要获取数据;不需要转换或过滤这些项目中的任何一个,我们希望将所有这些都收集到一个新的数据类型中

toMap - 具体来说,是一个 Map,它将某个键(例如 B)映射到某个值(例如 6)。

然后我们传递 4 个参数。

  • Arg 1,'keyMapper':s -> s.substring(0,1)

这表示:要获得键(映射 B 中的 'B' 映射到 6),取任何输入字符串,并将其缩减为第一个字符。

  • Arg 2,'valueMapper':s -> s.length == 1 ? 1 : Integer.parseInt(s.substring(1))

这表示:要获取值,首先检查字符串的长度是否仅为 1,如果是,则值为 1。否则,去掉第一个字符,然后将其余字符解析为数字

  • Arg3,“合并”函数:(a,b) -> a + b

要合并任意 2 个值(例如 "Q3" 中的 3 和 "Q" 中的 1),请添加它们。

  • Arg4:地图供应商:() -> new TreeMap<>()

我们都希望将其放入一个新的 TreeMap 类型的地图中; TreeMaps 保持自己在键上自动排序。这意味着“A=1”对首先出现在地图中,然后是 B,然后是 C,等等。 <> 告诉 java 自动找出这个映射应该有哪些键和值(字符串到整数,由于 keyMapper 和 valueMapper 函数自动派生)。

如果这对您来说很陌生,arg -> code; 表示:这是一个函数,它接收指定的参数,然后运行代码。它把这个函数交给了(不运行它;这取决于你把这个函数交给的代码来运行它)。 () 是“无参数”。

如果您想获取结果地图并生成确切的字符串...

String r = map.entrySet().stream()
  .map(x -> x.getKey() + " = " + x.getValue() + ",")
  .collect(Collectors.joining());
System.out.println(r);
> A = 1,B = 6,C = 2,Q = 4,Z = 2,

虽然我不确定你为什么要这样做。

.map() 将一个 foos 流变成条形,这里我们说:获取一个地图条目(一个对象,其中 .getKey() 为您提供 "B" 并且 .getValue() 为您提供 {{ 1}} 例如),并通过运行代码 6 将其转换为字符串,从而生成 "B" + " = " + 6 + ","

"B = 6," 表示:通过按顺序连接批次,将这个字符串流转换为单个字符串。