2 回答

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超8個(gè)贊
你可以:
生成索引流
使用索引獲取兩個(gè)字符串的字符
有效時(shí)選擇字符
// The magic
public static List<Character> getPrefix(String str1, String str2) {
return IntStream
.range(0, Math.min(str1.length(), str2.length()))
.mapToObj(i -> new char[] { str1.charAt(i), str2.charAt(i) })
.takeWhile(a -> a[0] < a[1])
.map(a -> a[0])
.collect(Collectors.toList());
}

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超1個(gè)贊
看看代碼,也許這就是你想要的。仍然可以進(jìn)一步增強(qiáng)它并且不能解決第一個(gè)字符串以大于第二個(gè)的值開(kāi)始的情況。這也可以實(shí)現(xiàn),但需要額外的工作。(不能一次性完成,因?yàn)楣?yīng)商消耗了一個(gè)元素來(lái)進(jìn)行鏈接 dropWhile 和 takeWhile 所需的檢查)。簡(jiǎn)單地說(shuō),通過(guò)供應(yīng)商,您可以將流中的元素與其他數(shù)據(jù)結(jié)構(gòu)中的元素進(jìn)行比較。
import java.util.LinkedList;
import java.util.function.Supplier;
import java.util.stream.Collectors;
public class Pre1 {
public static void main(String[] args) {
System.out.println(new Pre1().getPre("1234", "2315"));
System.out.println(new Pre1().getPre("941234", "712315"));
System.out.println(new Pre1().getPre("2345", "341"));
}
public String getPre(String s1, String s2) {
//second list is used as supplier
LinkedList<Integer> l2 = s2.chars().boxed()
.map(t->Character.getNumericValue(t))
.collect(Collectors.toCollection(LinkedList<Integer>::new));
//l2.forEach(System.out::println);
Supplier<Integer> supplier = () -> {
// System.out.println(l2.peek());
return l2.isEmpty() ? 0 : l2.pollFirst();
};
return s1.chars().boxed()
.map(t->Character.getNumericValue(t))
.takeWhile(t->t<supplier.get())
.map(t->String.valueOf(t))
.collect(Collectors.joining());
}
}
輸出
12
nothing
23
添加回答
舉報(bào)