如何获取字符串数组元素的索引?
How to get index of elements of string array?
我在 String[] strArray
中有以下数据
1, 9, 3, 4, 16, 6, 7, 8, 2, 10, 11, 12, 13, 45
我想找到那些包含 3
的元素的索引(例如:3,13)。即我应该有 3=str[2] 和 13=str[12] 只使用 Java 8 features 像流和等等,因为我想在找到它们的索引后,用特定的字符串替换它们,例如 "Test"
您可以获取数组的长度并从 i=0 迭代到 i
或者,您可以使用 Java Stream 方法 Map 来做同样的事情。
str.stream().map(x-> {if(String.valueOf(x).contains(“3”)) return “Test”;}).collect(Collectors.toList());
在这种情况下,您可能希望使用 .toArray 而不是收集为列表。
这是一种方法。使用三元运算符 (?:)
来决定是将当前字符串替换为 Test
还是原始值
String[] vals = { "1", "9", "3", "4", "16", "6", "7", "8",
"2", "10", "11", "12", "13", "45" };
vals = Arrays.stream(vals)
.map(str -> str.contains("3") ? "Test" : str)
.toArray(String[]::new);
System.out.println(Arrays.toString(vals));
打印
[1, 9, Test, 4, 16, 6, 7, 8, 2, 10, 11, 12, Test, 45]
到 return 数组元素的映射到找到的匹配项的索引,您可以这样做。这将处理具有不同索引的重复值。
- 流式传输数组的索引
- 过滤索引以获得匹配的值
- 使用分组依据将索引转换为整数(通过装箱 - 收集器需要)。
- 然后使用过滤后的索引分配给地图。该值是每个
key
实例所在位置的列表。
String[] vals = { "1", "9", "3", "4", "16", "6", "7", "8",
"2", "10", "11", "12", "13", "45", "43", "3", "13" };
Map<String, List<Integer>> results = IntStream.range(0,vals.length)
.filter(i -> vals[i].contains("3"))
.boxed()
.collect(Collectors.groupingBy(i->vals[i]));
results.forEach((k,v)-> System.out.println(k + " -> " + v));
打印
13 -> [12, 16]
3 -> [2, 15]
43 -> [14]
要用地图中其值的索引替换原始数组,请执行以下操作。
for (String key : results.keySet()) {
for (int i : results.get(key)) {
vals[i] = i+"";
}
}
我在 String[] strArray
1, 9, 3, 4, 16, 6, 7, 8, 2, 10, 11, 12, 13, 45
我想找到那些包含 3
的元素的索引(例如:3,13)。即我应该有 3=str[2] 和 13=str[12] 只使用 Java 8 features 像流和等等,因为我想在找到它们的索引后,用特定的字符串替换它们,例如 "Test"
您可以获取数组的长度并从 i=0 迭代到 i 或者,您可以使用 Java Stream 方法 Map 来做同样的事情。 在这种情况下,您可能希望使用 .toArray 而不是收集为列表。str.stream().map(x-> {if(String.valueOf(x).contains(“3”)) return “Test”;}).collect(Collectors.toList());
这是一种方法。使用三元运算符 (?:)
来决定是将当前字符串替换为 Test
还是原始值
String[] vals = { "1", "9", "3", "4", "16", "6", "7", "8",
"2", "10", "11", "12", "13", "45" };
vals = Arrays.stream(vals)
.map(str -> str.contains("3") ? "Test" : str)
.toArray(String[]::new);
System.out.println(Arrays.toString(vals));
打印
[1, 9, Test, 4, 16, 6, 7, 8, 2, 10, 11, 12, Test, 45]
到 return 数组元素的映射到找到的匹配项的索引,您可以这样做。这将处理具有不同索引的重复值。
- 流式传输数组的索引
- 过滤索引以获得匹配的值
- 使用分组依据将索引转换为整数(通过装箱 - 收集器需要)。
- 然后使用过滤后的索引分配给地图。该值是每个
key
实例所在位置的列表。
String[] vals = { "1", "9", "3", "4", "16", "6", "7", "8",
"2", "10", "11", "12", "13", "45", "43", "3", "13" };
Map<String, List<Integer>> results = IntStream.range(0,vals.length)
.filter(i -> vals[i].contains("3"))
.boxed()
.collect(Collectors.groupingBy(i->vals[i]));
results.forEach((k,v)-> System.out.println(k + " -> " + v));
打印
13 -> [12, 16]
3 -> [2, 15]
43 -> [14]
要用地图中其值的索引替换原始数组,请执行以下操作。
for (String key : results.keySet()) {
for (int i : results.get(key)) {
vals[i] = i+"";
}
}