相关疑难解决方法(0)

Java 8 List <T>到Map <T,(index)>

是否有一种方便的Java8流API方式从List<T> to Map<T, (index)>以下示例进行转换:

    List<Character> charList = "ABCDE".chars().mapToObj(e->(char)e).collect(Collectors.toList());

    Map<Character, Integer> map = new HashMap<>();
    for (int i = 0; i < charList.size(); i++) {
        map.put(charList.get(i), i);
    }
Run Code Online (Sandbox Code Playgroud)

映射= {A = 0,B = 1,C = 2,D = 3,E = 4}

java lambda java-8 java-stream

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

Java 8替代字符串中奇数位置的字符总和?

很想知道是否有更优雅的方法试图在Java 8中找到字符串中奇数位置的数字总和.

这是我目前的职能

 /**
 * Explode string into char array, get sum of ASCII values at odd positions and divide by 10 to convert
 * to the integer value from that character
 * @param ccNumber string
 * @return int sum
 */
int calculateSumOfOddDigits(final String ccNumber) {
    final char[] digits = ccNumber.toCharArray();
    return (digits[0] + digits[2] + digits[4] + digits[6] + digits[8] + digits[10] + digits[12] + digits[14]) / 10;
}
Run Code Online (Sandbox Code Playgroud)

还不熟悉Streams和Java 8,想想也许你可以这样做:

 ccNumber.chars().mapToObj(x -> (char) x {
        ..add odd position …
Run Code Online (Sandbox Code Playgroud)

java string java-8 java-stream

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

是否可以使用 Java 8 Streams 过滤器访问列表的索引?

是否可以使用 Streams 过滤器访问列表的索引?我的意思是...我知道可以使用循环(while、for 等)来做到这一点,但就好像列表在变成流时会丢失有关索引的信息。

我想是这样的:

list.stream().filter(x -> x > 100)
    .fiter(--getIndexOfEachValue--)
    .collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)

如果我有 List=[10,200,30,150,400,30]...

我期望结果=[1,3,4]

java java-8 java-stream

0
推荐指数
1
解决办法
1575
查看次数

Java8 forEach 带索引

我找不到使用当前对象和当前索引调用 lamda 的 forEach 方法。

不幸的是,这在 java8 中没有实现,所以下面的实现是不可能的:

List<String> list = Arrays.asList("one", "two");
list.forEach((element, index) -> System.out.println(String.format("[%d] : %s", index, element)));
Run Code Online (Sandbox Code Playgroud)

我知道一个简单的方法是使用带有索引整数的 for each 循环:

List<String> list = Arrays.asList("one", "two");

int index = 0;
for (String element : list) {
   System.out.println(String.format("[%d] : %s", index++, element));
}
Run Code Online (Sandbox Code Playgroud)

我认为初始化索引整数并为每次迭代增加它的通用代码应该移到一个方法中。所以我定义了自己的forEach方法:

public static <T> void forEach(@NonNull Iterable<T> iterable, @NonNull ObjIntConsumer<T> consumer) {
    int i = 0;
    for (T t : iterable) {
        consumer.accept(t, i++);
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以像这样使用它:

List<String> list = Arrays.asList("one", "two"); …
Run Code Online (Sandbox Code Playgroud)

java foreach java-8

-1
推荐指数
1
解决办法
6482
查看次数

标签 统计

java ×4

java-8 ×4

java-stream ×3

foreach ×1

lambda ×1

string ×1