Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有办法在for循环中链接列表(或映射)?_Java_Loops_For Loop - Fatal编程技术网

Java 有没有办法在for循环中链接列表(或映射)?

Java 有没有办法在for循环中链接列表(或映射)?,java,loops,for-loop,Java,Loops,For Loop,有此代码: Map<String,Rect> map1 = new HashMap<String,Rect>(); Map<String,Rect> map2 = new HashMap<String,Rect>(); ... for( Rect r: map1.values() ) { r.offset(10,10); } for( Rect r: map2.values() ) { r.offset(10,10); } Map

有此代码:

Map<String,Rect> map1 = new HashMap<String,Rect>();
Map<String,Rect> map2 = new HashMap<String,Rect>();
...
for( Rect r: map1.values() ) {
    r.offset(10,10);
}
for( Rect r: map2.values() ) {
    r.offset(10,10);
}
Map map1=newhashmap();
Map map2=新的HashMap();
...
for(Rect r:map1.values()){
r、 偏移量(10,10);
}
for(Rect r:map2.values()){
r、 偏移量(10,10);
}
如果两个循环中的代码相同,有没有简单的方法将两个循环组合成一个循环?(假设所有地图键都不同)。

我有一些想法也会有帮助(比如将两个贴图合并成一个贴图,或者使用方法以贴图作为参数进行循环),但我想知道Java语法中是否有某种东西可以将两个相似的列表链接起来,并循环遍历它们。

crater方法,并根据需要多次调用它

public void updateOffset(Map<String,Rect> map) {
    for( Rect r: map.values() ) {
        r.offset(10,10);
    }
}
public void updateOffset(映射){
for(Rect r:map.values()){
r、 偏移量(10,10);
}
}
现在你的代码变成了

Map<String,Rect> map1 = new HashMap<String,Rect>();
Map<String,Rect> map2 = new HashMap<String,Rect>();
...
updateOffset(map1);
updateOffset(map2);
Map map1=newhashmap();
Map map2=新的HashMap();
...
更新偏移量(map1);
更新偏移量(map2);

地图的组合始终限制您的地图始终具有唯一的键。因此,只有在确保密钥始终是唯一的情况下,才可以进行合并。

crater方法,并根据需要多次调用它

public void updateOffset(Map<String,Rect> map) {
    for( Rect r: map.values() ) {
        r.offset(10,10);
    }
}
public void updateOffset(映射){
for(Rect r:map.values()){
r、 偏移量(10,10);
}
}
现在你的代码变成了

Map<String,Rect> map1 = new HashMap<String,Rect>();
Map<String,Rect> map2 = new HashMap<String,Rect>();
...
updateOffset(map1);
updateOffset(map2);
Map map1=newhashmap();
Map map2=新的HashMap();
...
更新偏移量(map1);
更新偏移量(map2);

地图的组合始终限制您的地图始终具有唯一的键。因此,只有在确保密钥始终是唯一的情况下才进行合并。

Java本机不支持这种行为

如果要使用,则可以执行以下操作:

for (final Rect rect : Iterables.concat(map1.values(), map2.values())) {

}
你也可以上一堂快速实用课。我在这里使用了varargs,这样用法就更好了;缺点是,当泛型数组创建和varargs方法被取消选中时,编译器将抛出大量警告

public class CombinedIterable<T> implements Iterable<T> {

    public static <T> Iterable<T> concat(Iterable<? extends T>... iterables) {
        return new CombinedIterable<T>(iterables);
    }

    private final List<Iterable<? extends T>> iterables;

    private CombinedIterable(Iterable<? extends T>... iterables) {
        this.iterables = Arrays.asList(iterables);
    }

    @Override
    public Iterator<T> iterator() {
        return new Iterator<T>() {

            private final Iterator<Iterable<? extends T>> pos = iterables.iterator();
            private Iterator<? extends T> iter = pos.next().iterator();

            @Override
            public boolean hasNext() {
                if (iter.hasNext()) {
                    return true;
                }
                if (pos.hasNext()) {
                    iter = pos.next().iterator();
                }
                return iter.hasNext();
            }

            @Override
            public T next() {
                return iter.next();
            }

            @Override
            public void remove() {
                throw new UnsupportedOperationException("Not supported.");
            }
        };
    }

}

如果您对这种行为感兴趣……

Java本身并不支持这种行为

如果要使用,则可以执行以下操作:

for (final Rect rect : Iterables.concat(map1.values(), map2.values())) {

}
你也可以上一堂快速实用课。我在这里使用了varargs,这样用法就更好了;缺点是,当泛型数组创建和varargs方法被取消选中时,编译器将抛出大量警告

public class CombinedIterable<T> implements Iterable<T> {

    public static <T> Iterable<T> concat(Iterable<? extends T>... iterables) {
        return new CombinedIterable<T>(iterables);
    }

    private final List<Iterable<? extends T>> iterables;

    private CombinedIterable(Iterable<? extends T>... iterables) {
        this.iterables = Arrays.asList(iterables);
    }

    @Override
    public Iterator<T> iterator() {
        return new Iterator<T>() {

            private final Iterator<Iterable<? extends T>> pos = iterables.iterator();
            private Iterator<? extends T> iter = pos.next().iterator();

            @Override
            public boolean hasNext() {
                if (iter.hasNext()) {
                    return true;
                }
                if (pos.hasNext()) {
                    iter = pos.next().iterator();
                }
                return iter.hasNext();
            }

            @Override
            public T next() {
                return iter.next();
            }

            @Override
            public void remove() {
                throw new UnsupportedOperationException("Not supported.");
            }
        };
    }

}


如果你对这类事情感兴趣……

谢谢你,阿什,这也是我在问题中提出的想法之一。实际上,我想知道java中是否有一些列表链接语法。@ILOMABO没有eact列表链接方法。但如果您不想这样做,您可以将所有值添加到列表/集合中,然后在单个迭代中执行操作再次感谢Ashish,这也是我提出的另一个想法(合并)。我担心迭代器的本质可能会阻止列表链接,并且必须使用其他两种解决方案之一。我只是觉得用链式链接代码会更优雅。让我们等几个小时,看看是否有人有新的信息,如果没有,我会接受你的回答。谢谢你,阿什,这也是我在问题中提出的想法之一。实际上,我想知道java中是否有一些列表链接语法。@ILOMABO没有eact列表链接方法。但如果您不想这样做,您可以将所有值添加到列表/集合中,然后在单个迭代中执行操作再次感谢Ashish,这也是我提出的另一个想法(合并)。我担心迭代器的本质可能会阻止列表链接,并且必须使用其他两种解决方案之一。我只是觉得用链式链接代码会更优雅。让我们等几个小时,看看是否有人有一些新的信息,如果没有,我会接受你的回答。可能重复的是,重复。关于那篇文章的好消息。可能是重复的,重复的。关于那篇文章的好信息。
combineditable.concat(s1,s2,s3)
不应该是
combineditable.concat(s1,s2,s3)
;否。我使用了静态工厂方法模式来避免指定类型。为什么不支持
remove()
方法?执行iter.remove()而不是抛出异常有什么问题?@ilombo没问题,我只是没有。根据您的使用情况,您可能不希望允许从串联的
Iterable
s中删除。另外,如果列表中的一些可删除的支持删除,而另一些不支持删除,则行为会有点奇怪。最后一个澄清。如果我没有弄错的话,
combineditable
也允许
concat
iterables属于不同的类,例如Map和Set。难道
combineditable.concat(s1,s2,s3)
不应该是
combineditable.concat(s1,s2,s3)
;否。我使用了静态工厂方法模式来避免指定类型。为什么不支持
remove()
方法?执行iter.remove()而不是抛出异常有什么问题?@ilombo没问题,我只是没有。根据您的使用情况,您可能不希望允许从串联的
Iterable
s中删除。另外,如果列表中的一些可删除的支持删除,而另一些不支持删除,则行为会有点奇怪。最后一个澄清。如果我没有弄错的话,
combineditable
允许
concat
iterables也属于不同的类,例如Map和Set。