Java 8 Java 8:获取新地图X->;Z来自另外两个地图X->;Y和Y->;Z
我有两张地图:Java 8 Java 8:获取新地图X->;Z来自另外两个地图X->;Y和Y->;Z,java-8,Java 8,我有两张地图: Map<String, Integer> x; Map<Integer, String> y; mapx; 地图y; 我想要的是一个新的映射,map其中这个新映射在x中有字符串键映射到y中的字符串值,这些新键对在y中保持与string->Integer->string相同的映射 有人知道在Java8中使用streams实现这一点的方法吗 x.entrySet() .stream() .collect(Collectors.toMap(
Map<String, Integer> x;
Map<Integer, String> y;
mapx;
地图y;
我想要的是一个新的映射,map
其中这个新映射在x中有字符串键映射到y中的字符串值,这些新键对在y中保持与string->Integer->string相同的映射
有人知道在Java8中使用streams实现这一点的方法吗
x.entrySet()
.stream()
.collect(Collectors.toMap(
e -> e.getKey(),
e -> y.get(e.getValue())
));
但这可能会失败,原因有很多,您可以考虑如何解决:就像会发生的情况一样,x
中有一个值,但是y
中不存在这样的键;或者如果x
中有多个相同的值?如果你把问题说清楚一点,所有这些问题都可以解决
但这可能会失败,原因有很多,您可以考虑如何解决:就像会发生的情况一样,
x
中有一个值,但是y
中不存在这样的键;或者如果x
中有多个相同的值?如果你把问题说清楚一点,所有这些问题都可以解决 使用第一个映射的条目集的简单实现如下所示:
Map<String, String> result = x.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey, e -> y.get(e.getValue())));
Map result=x.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey,e->y.get(e.getValue()));
使用第一个映射的条目集的简单实现如下所示:
Map<String, String> result = x.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey, e -> y.get(e.getValue())));
Map result=x.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey,e->y.get(e.getValue()));
您必须迭代x
条目的条目集,并将y
的值对应于x
的值。
当值不在y
中时,总是有可能返回null,因此
对于这种情况,您可以使用y
的get()
方法上的Optional.ofNullable()
将某个值设置为默认值,并在以后处理默认值。但考虑到x
和y
的大小可能不同,这仍然是一种危险的方法
例如:
Map< String, Integer > x = new HashMap<>( );
x.put( "a", 1 );
x.put( "b", 2 );
x.put( "c", 3 );
Map< Integer, String > y = new HashMap<>( );
y.put( 1, "a" );
y.put( 2, "b" );
y.put( 4, "c );
Map< String, String > z = new HashMap<>( );
if ( x.size( ) == y.size( ) ) {
z = x.entrySet( )
.stream( )
.collect(
Collectors.toMap( Map.Entry::getKey,
entry -> Optional.ofNullable( y.get( entry.getValue( ) ) ).orElse( "N/A" ) ) );
}
System.out.println( z );
//prints {a=a, b=b, c=N/A}
Mapx=newhashmap();
x、 付诸表决(“a”,1);
x、 付诸表决(“b”,2);
x、 put(“c”,3);
Mapy=newhashmap();
y、 付诸表决(1,“a”);
y、 付诸表决(2,“b”);
y、 第(4)项,“c”;
Mapz=newhashmap();
如果(x.size()==y.size()){
z=x.entrySet()
.stream()
.收取(
Collectors.toMap(Map.Entry::getKey,
entry->Optional.ofNullable(y.get(entry.getValue()).orElse(“N/A”));
}
系统输出打印ln(z);
//打印{a=a,b=b,c=N/a}
您必须迭代x
条目的条目集,并将y
的值对应于x
的值。
当值不在y
中时,总是有可能返回null,因此
在这种情况下,您可以使用y
的get()
方法上的Optional.ofNullable()
将某个值设置为默认值,并在以后处理该默认值。但考虑到x
和y
的大小可能不同,这仍然是一种危险的方法
例如:
Map< String, Integer > x = new HashMap<>( );
x.put( "a", 1 );
x.put( "b", 2 );
x.put( "c", 3 );
Map< Integer, String > y = new HashMap<>( );
y.put( 1, "a" );
y.put( 2, "b" );
y.put( 4, "c );
Map< String, String > z = new HashMap<>( );
if ( x.size( ) == y.size( ) ) {
z = x.entrySet( )
.stream( )
.collect(
Collectors.toMap( Map.Entry::getKey,
entry -> Optional.ofNullable( y.get( entry.getValue( ) ) ).orElse( "N/A" ) ) );
}
System.out.println( z );
//prints {a=a, b=b, c=N/A}
Mapx=newhashmap();
x、 付诸表决(“a”,1);
x、 付诸表决(“b”,2);
x、 put(“c”,3);
Mapy=newhashmap();
y、 付诸表决(1,“a”);
y、 付诸表决(2,“b”);
y、 第(4)项,“c”;
Mapz=newhashmap();
如果(x.size()==y.size()){
z=x.entrySet()
.stream()
.收取(
Collectors.toMap(Map.Entry::getKey,
entry->Optional.ofNullable(y.get(entry.getValue()).orElse(“N/A”));
}
系统输出打印ln(z);
//打印{a=a,b=b,c=N/a}