相关疑难解决方法(0)

Java 8 lambdas,Function.identity()或t-> t

我对该Function.identity()方法的用法有疑问.

想象一下以下代码:

Arrays.asList("a", "b", "c")
          .stream()
          .map(Function.identity()) // <- This,
          .map(str -> str)          // <- is the same as this.
          .collect(Collectors.toMap(
                       Function.identity(), // <-- And this,
                       str -> str));        // <-- is the same as this.
Run Code Online (Sandbox Code Playgroud)

是否有任何理由你应该使用Function.identity()而不是str->str(反之亦然).我认为第二种选择更具可读性(当然是品味问题).但是,有没有"真正的"理由为什么应该首选?

java lambda java-8

211
推荐指数
3
解决办法
10万
查看次数

用流映射的Java 8列表

我有一个List<Item>集合.我需要将其转换Map<Integer, Item> 为映射的键必须是集合中项的索引.我无法弄清楚如何使用流来做到这一点.就像是:

items.stream().collect(Collectors.toMap(...));
Run Code Online (Sandbox Code Playgroud)

有帮助吗?

由于这个问题被确定为可能重复,我需要补充一点,我的具体问题是 - 如何获取列表中项目的位置并将其作为键值

java collections dictionary java-8 java-stream

49
推荐指数
4
解决办法
7万
查看次数

如何使用 Java-8 Streams 将列表转换为映射,其中 Key 是 ListValue,Value 是该特定列表的值的数量

这是我的清单:

List<Card> cards;
Run Code Online (Sandbox Code Playgroud)

我想在其中创建地图的 Java-8 流

Map<String, Integer> cardsMap = cards.stream().collect(Collectors.groupingBy(Card::getCardValue, amount of cards that are grouped));
Run Code Online (Sandbox Code Playgroud)

这显然行不通,但我不知道否则我会如何做。

java java-8

6
推荐指数
1
解决办法
4828
查看次数

Java 8 Streams - 分组为单值

我目前正在处理List<Map<String, Object>>我试图在地图中的各种键之间进行分组的位置.这似乎很好地使用Java 8 Stream:

Map<Object, Map<Object, List<Map<String, Object>>>> collect =
   list
   .stream()
   .collect(Collectors.groupingBy(
       item -> item.get("key1"),
       Collectors.groupingBy(item -> item.get("key2"))
   ));
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,这给了我一个Map<Object, Map<Object, List<Map<String, Object>>>>在可能的分组结果大于1的情况下运行良好的情况.

我有各种例子,例如,正在进行的分组总是会导致最低级别列表中的单个项目.

行列表

{
  [reference="PersonX", firstname="Person", dob="test", lastname="x"],
  [reference="JohnBartlett", firstname="John", dob="test", lastname="Bartlett"]
}
Run Code Online (Sandbox Code Playgroud)

通过引用分组

目前 - 分组为1列表 Map<String,Object>

[PersonX, { [reference="PersonX", firstname="Person", dob="test", lastname="x"]}],
[JohnBartlett, { [reference="JohnBartlett", firstname="John", dob="test", lastname="Bartlett"]}]
Run Code Online (Sandbox Code Playgroud)

偏好 - 没有列表只是一个 Map<String,Object>

[PersonX, [reference="PersonX", firstname="Person", dob="test", lastname="x"]],
[JohnBartlett, [reference="JohnBartlett", firstname="John", dob="test", lastname="Bartlett"]]
Run Code Online (Sandbox Code Playgroud)

在流中是否有一种方法可以强制这些实例的输出Map<Object, Map<Object, Map<String, Object>>>- …

java java-8 java-stream

6
推荐指数
2
解决办法
3327
查看次数

按类别划分java流

我有一个stream<A>,在哪里

class A {
  String category();
  // ...
}
Run Code Online (Sandbox Code Playgroud)

我想得到一个map<String, list<A>>,基于category()的值将原始流划分为子列表.使用for循环实现它是非常简单的,但是有可能获得利用java流的更优雅的解决方案吗?

例:

鉴于{[a, xyz], [a, zyx], [b, abc]},我想得到一张地图:

a -> {[a, xyz], [a, zyx]}
b -> {[b, abc]}
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

5
推荐指数
1
解决办法
213
查看次数

Lambda&Stream:收集地图

我想使用Stream&Lambda夫妇构建一个Map.

我尝试了很多方法但是我被困了.这是使用Stream/Lambda和经典循环完成它的经典Java代码.

Map<Entity, List<Funder>> initMap = new HashMap<>();
List<Entity> entities = pprsToBeApproved.stream()
    .map(fr -> fr.getBuyerIdentification().getBuyer().getEntity())
    .distinct()
    .collect(Collectors.toList());

for(Entity entity : entities) {
    List<Funder> funders = pprsToBeApproved.stream()
        .filter(fr -> fr.getBuyerIdentification().getBuyer().getEntity().equals(entity))
        .map(fr -> fr.getDocuments().get(0).getFunder())
        .distinct()
        .collect(Collectors.toList());
    initMap.put(entity, funders);
        }
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我只知道如何在列表中收集,但我不能对地图做同样的事情.这就是为什么我必须再次流式传输我的列表以构建第二个列表,最后将所有列表放在一个地图中.我也尝试了'collect.groupingBy'语句,因为它也应该生成一张地图,但我失败了.

java lambda hashmap java-8 java-stream

5
推荐指数
1
解决办法
195
查看次数

从单个列表中并行地输入地图和列表

我有一个如下列表.

List<Model> models = ....
Run Code Online (Sandbox Code Playgroud)

到现在为止,我这样做了

List<String> anotherlist = models.parallelStream().map(Model::getName).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

现在,我创建了另一张地图

Map<String, Model> modelsMap = new ConcurrentHashMap<String, Model>();
for (final Model model : models) {
   modelsMap.put(model.getId(), model);
}
Run Code Online (Sandbox Code Playgroud)

是否有可能当我在models列表上创建并行流时,我可以modelsMap并排准备我而不必models再次遍历列表?并行流只能绑定到一种操作吗?

java java-8 java-stream

4
推荐指数
1
解决办法
92
查看次数

Java:有效地将List中的项目放入HashMap

我在这里有一个清单:

List<QueryStrings> queryStrings
Run Code Online (Sandbox Code Playgroud)

和QueryStrings只是一个简单的类

public class QueryStrings {
    private Integer id;
    private String rel;
    private String impl;
}
Run Code Online (Sandbox Code Playgroud)

我需要将List放入一个HashMap,其中id将是键,我现在这样做,一次循环List一个项:

HashMap<Integer, QueryStrings> queryMap = new HashMap<>();
for (QueryStrings element : queryStrings) {
    Integer thisId = Integer.parseInt(element.getId());
    queryMap.put(thisId, element);
}
Run Code Online (Sandbox Code Playgroud)

有更好的方法吗?我不想循环每个项目,这可能吗?

编辑:

对不起,我不应该解析整数,所以代码应该是这样的:

HashMap<Integer, QueryStrings> queryMap = new HashMap<>();
for (QueryStrings element : queryStrings) {
    queryMap.put(element.getId(), element);
}
Run Code Online (Sandbox Code Playgroud)

java hashmap

4
推荐指数
1
解决办法
1606
查看次数

如何将List <Long>转换为Map <Long,Long>

我有以下代码,并希望使用java 8将列表转换LongMap<Long,Long>.

Long globalVal= 10;
List<Long> queryLongs = Arrays.asList(600L,700L,800L);
Map<Long, Long> map = queryLongs.stream().collect(Collectors.toMap(i->i, globalVal)));
Run Code Online (Sandbox Code Playgroud)

当我尝试将列表中的单个值映射为地图的键时,出现错误.

java java-8

4
推荐指数
1
解决办法
561
查看次数

Java 8 List&lt;V&gt; 到 Map&lt;K, V&gt; 和函数

我试图按照Java 8 List 进入 Map并尝试在一个列表中更改 Set to Map

而不是循环(有效)

for (Type t : toSet()) {
    map.put(Pair.of(t, Boolean.TRUE), this::methodAcceptingMap);
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下解决方案:

toSet().stream()
       .collect(Collectors.toMap(Pair.of(Function.identity(), Boolean.TRUE), 
                                 this::methodAcceptingMap));
Run Code Online (Sandbox Code Playgroud)

但在转换时出错:

Type mismatch: cannot convert from Pair<Function<Object,Object>,Boolean> 
to Function<? super T,? extends K>
Run Code Online (Sandbox Code Playgroud)

我的地图

private Map<Pair<Type, Boolean>, BiConsumer<Pair<Type, Boolean>, Parameters>> map =
      new HashMap<>();
Run Code Online (Sandbox Code Playgroud)

java dictionary set java-8 java-stream

3
推荐指数
1
解决办法
125
查看次数

标签 统计

java ×10

java-8 ×9

java-stream ×6

dictionary ×2

hashmap ×2

lambda ×2

collections ×1

set ×1