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}