list有多个 重复值, 获取指定重复值的 分别位置
时间: 2023-08-22 14:06:00 浏览: 220
如果列表中有多个重复值,并且你想获取某个指定的重复值在列表中出现的所有位置,你可以使用以下代码:
```python
my_list = ['a', 'b', 'c', 'a', 'd', 'e', 'a']
target_value = 'a'
indices = [i for i, x in enumerate(my_list) if x == target_value]
print(f"The value '{target_value}' appears at the following indices: {indices}")
```
在这个例子中,我们定义了一个包含多个重复值的列表 `my_list`,以及我们想要查找的目标值 `target_value`。然后,我们使用列表推导式 `[i for i, x in enumerate(my_list) if x == target_value]` 来找到所有匹配的位置。这个列表推导式会遍历列表中的每个元素,记录下与目标值匹配的元素的所有索引位置。
最后,我们打印出所有匹配位置的列表。在这个例子中,输出结果为:
```
The value 'a' appears at the following indices: [0, 3, 6]
```
这意味着在 `my_list` 中,值为 `'a'` 的元素出现在索引位置 `0`,`3` 和 `6`。
相关问题
for循环里添加异步方法,往异步方法里传入List,在异步方法中深拷贝一份传入的List,然后set到ThreadLocal中,for循环在ThreadLocal取值,会出现获取的值重复
这个问题的原因是多个异步方法共用了同一个ThreadLocal,导致在其中一个异步方法中修改ThreadLocal的值会影响到其他异步方法。解决这个问题的方法是为每个异步方法都创建一个新的ThreadLocal实例,这样每个异步方法都有自己独立的ThreadLocal实例,就不会相互干扰了。具体的实现方法可以使用ThreadLocal的withInitial方法,在创建ThreadLocal实例的时候为其指定一个初始化函数,该函数会在第一次访问该ThreadLocal实例时被调用,可以在该函数中创建一个新的List并返回。例如:
```
private static ThreadLocal<List<Object>> threadLocal = ThreadLocal.withInitial(ArrayList::new);
public static void asyncMethod(List<Object> list) {
List<Object> copyList = new ArrayList<>(list);
threadLocal.set(copyList);
CompletableFuture.runAsync(() -> {
List<Object> threadList = threadLocal.get();
// do something with threadList
});
}
```
在上面的代码中,我们使用了withInitial方法为ThreadLocal实例创建了一个初始化函数,该函数返回一个新的ArrayList实例。在异步方法中,我们首先深拷贝了传入的List,然后将其set到ThreadLocal中,这样在异步方法中就可以获取到独立的List实例了。在异步方法中,我们通过threadLocal.get()方法获取到ThreadLocal中保存的List实例来进行操作。
java8获取列表对象元素的两个属性值组成无重复元素的map
首先,我们需要一个列表对象,其中包含多个元素,每个元素都有两个属性值。假设这个列表对象名为list,并且元素属性值分别为属性1和属性2。
我们可以使用Java 8的流式操作来获取列表对象的属性值,并将其转换为无重复元素的map。
首先,我们将列表对象list转换为流,使用stream()方法:
Stream<Element> stream = list.stream();
接下来,我们将每个元素转换为一个包含属性1和属性2值的Entry对象,并将其作为map的key-value对。
Map<Object, Object> map = stream
.map(element -> new AbstractMap.SimpleEntry<>(element.getProperty1(), element.getProperty2()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue));
在上述代码中,我们通过调用stream的map方法将每个元素转换为Entry对象。这里使用了AbstractMap.SimpleEntry类来创建Entry对象,传入element的属性1和属性2值。
在转换完每个元素后,我们使用collect方法将这些Entry对象收集到map中。在收集的过程中,我们指定了合并重复key的规则,这样就能确保生成的map中没有重复的key。
最后,我们得到了一个无重复元素的map,其中key是列表对象元素的属性1值,value是属性2值。
需要注意的是,属性1值和属性2值都需要正确实现equals和hashCode方法,以确保在收集过程中没有重复的key。
阅读全文