在Java中迭代映射时跳过索引

在Java中迭代映射时跳过索引,java,hashmap,iteration,java-stream,Java,Hashmap,Iteration,Java Stream,您好,我期待着您的帮助,在java映射的迭代过程中跳过索引。 我有一张10个元素的地图,我想跳过索引8中的元素,我如何才能实现目标。 我尝试使用streams()的skip()方法,但它将元素从开始跳到输入的计数。以下是我的方法 public void copyRow(Row row){ this.clear(); row.entrySet().stream().skip(8).forEach(e -> this.put(e.getKey()

您好,我期待着您的帮助,在java映射的迭代过程中跳过索引。 我有一张10个元素的地图,我想跳过索引8中的元素,我如何才能实现目标。 我尝试使用streams()的skip()方法,但它将元素从开始跳到输入的计数。以下是我的方法

public void copyRow(Row row){
        this.clear();
        row.entrySet().stream().skip(8).forEach(e ->
        this.put(e.getKey(),new Cell(e.getValue().getRowNo(),e.getValue().getColNo(),e.getValue().getValue()))
        );

是否有任何方法可以在流中执行此操作,或者是否有其他方法?

哈希映射没有排序,因此没有“索引”的概念。没有人知道索引8的条目是什么——每次都可能不同

更好的办法是检查钥匙。如果没有与要跳过的值关联的固定键,则可能应该设计数据的存储方式。因为如果这是真的,那么您存储的数据是基于不存在的“索引”概念的,这不太好用

要跳过某个特定键,只需调用
filter

row.entrySet().stream()
    .filter(e -> !e.getKey().equals(someKeyThatIdentifiesTheEntryAtIndex8))
    .forEach(e ->
        this.put(e.getKey(),new Cell(e.getValue().getRowNo(),e.getValue().getColNo(),e.getValue().getValue()))
    );
如果使用具有“索引”概念的集合,如数组或列表,则可以执行以下操作:

int[] a = {1,2,3,4,5,6,7,8,9,10,11};

IntStream firstPart = Arrays.stream(a).limit(7);
IntStream secondPart = Arrays.stream(a).skip(8);
IntStream finalStream = IntStream.concat(firstPart, secondPart);
finalStream.forEach(System.out::println);

哈希映射没有排序,因此没有“索引”的概念。没有人知道索引8的条目是什么——每次都可能不同

更好的办法是检查钥匙。如果没有与要跳过的值关联的固定键,则可能应该设计数据的存储方式。因为如果这是真的,那么您存储的数据是基于不存在的“索引”概念的,这不太好用

要跳过某个特定键,只需调用
filter

row.entrySet().stream()
    .filter(e -> !e.getKey().equals(someKeyThatIdentifiesTheEntryAtIndex8))
    .forEach(e ->
        this.put(e.getKey(),new Cell(e.getValue().getRowNo(),e.getValue().getColNo(),e.getValue().getValue()))
    );
如果使用具有“索引”概念的集合,如数组或列表,则可以执行以下操作:

int[] a = {1,2,3,4,5,6,7,8,9,10,11};

IntStream firstPart = Arrays.stream(a).limit(7);
IntStream secondPart = Arrays.stream(a).skip(8);
IntStream finalStream = IntStream.concat(firstPart, secondPart);
finalStream.forEach(System.out::println);

它是什么类型的地图?“地图”和“索引”通常不兼容。即使是排序后的映射也没有明确的索引概念,而是所有位置操作(头部、尾部等)都基于元素比较。因此,如果您有一个已排序的映射,并且知道什么元素应该位于“索引”8(或9),您可以使用
tailMap(9处的元素)
(包含传递的元素)。顺便说一句,对我来说
表示的不仅仅是一个简单的映射。如果是这种情况,那么可能有比使用条目集更好的东西,我们只需要知道
实际上是什么。另一个想法是:如果
entrySet()
提供的顺序对您来说合适(取决于您拥有的映射,请注意,除非它是排序映射,否则顺序可能不确定)您可以尝试两步方法:首先使用
limit(7)
获取前7个元素,然后使用
skip(8)
获取元素9+。-免责声明:请先阅读所有其他评论和答案,并尝试选择更适合的方法。这只是最后的手段。它是什么类型的地图?“地图”和“索引”通常不兼容。即使是排序后的映射也没有明确的索引概念,而是所有位置操作(头部、尾部等)都基于元素比较。因此,如果您有一个已排序的映射,并且知道什么元素应该位于“索引”8(或9),您可以使用
tailMap(9处的元素)
(包含传递的元素)。顺便说一句,对我来说
表示的不仅仅是一个简单的映射。如果是这种情况,那么可能有比使用条目集更好的东西,我们只需要知道
实际上是什么。另一个想法是:如果
entrySet()
提供的顺序对您来说合适(取决于您拥有的映射,请注意,除非它是排序映射,否则顺序可能不确定)您可以尝试两步方法:首先使用
limit(7)
获取前7个元素,然后使用
skip(8)
获取元素9+。-免责声明:请先阅读所有其他评论和答案,并尝试选择更适合的方法。这只是最后的手段。非常感谢你。我会试着给你回复:)非常感谢你。我会努力的,然后会回复你:)