我想知道如何獲得這些值并將它們放在一個新的字串中
class Rna {
static Map<Character, Character> map = (Map<Character, Character>) Map.of(
'G', 'C',
'C', 'G',
'T', 'A',
'A', 'U'
);
String transcribe(String dnaStrand) {
return dnaStrand.chars()
.map(c -> map.get(c))
.collect(StringBuilder::new, StringBuilder::appendCodePoint ,StringBuilder::append)
.toString();
}
}
transcribe 應該回傳一個類似“AUGC”的字串。現在我得到了這個例外。

uj5u.com熱心網友回復:
我認為問題在于您使用String.chars()回傳 s 流的方法,int但您不能期望將 a 自動裝箱int到 a Character。
地圖不包含intorInteger鍵,因此總是會回傳null獲取。
作為一種解決方案,您可以嘗試將 c 轉換為 char 甚至Character手動創建實體:
.map(c -> map.get((char)c)) 或者 .map(c -> map.get(Character.valueof((char)c))
uj5u.com熱心網友回復:
這是一種方法。使用地圖中的一串鍵呼叫該方法base/pair。該字串映射到的任何字符都將null被過濾掉。這假定地圖實體對該方法可見。否則,它將需要作為引數提供。
chars()提供字符流- 獲取當前字符的映射并轉換為字串
- 過濾掉任何空值。
- 將字串字符加入長鏈并回傳。
static String transcribe(String dnaStrand) {
return dnaStrand.chars()
.mapToObj(c -> String.valueOf(map.get((char)c)))
.filter(str->!str.equals("null"))
.collect(Collectors.joining());
}
System.out.println(transcribe("GCTA"));
將回傳并列印
CGAU
uj5u.com熱心網友回復:
char 過時的
原始char型別及其包裝類Character自 Java 2 以來一直是遺留的。作為 16 位值,這些型別在物理上無法表示大多數字符。
避免char/Character型別。
代碼點
相反,使用Unicode 代碼點整數來處理單個字符。
您的代碼將char值與代碼點代碼混合。不要混合型別。避免char,僅使用代碼點。
不幸的是,Java 缺少代碼點的型別。因此,我們將int/Integer與幾種方法一起使用,這些方法笨拙地分布在各種類中,包括String、StringBuilder和Character。
Map< Integer , Integer > transMap =
Map.of(
"G".codePointAt(0) , "C".codePointAt(0) ,
"C".codePointAt(0) , "G".codePointAt(0) ,
"T".codePointAt(0) , "A".codePointAt(0) ,
"A".codePointAt(0) , "U".codePointAt(0)
)
;
轉錄方法交換整數。然后使用收集這些整數StringBuilder#appendCodePoints。
順便說一句,您的transcribe方法可以通過采用型別引數CharSequence而不是String. CharSequence是由 實作的介面String。我們需要在引數上呼叫的唯一方法是codePoints. 該方法是CharSequence.
String transcribe( final CharSequence dnaStrand ) {
return
dnaStrand
.codePoints()
.map( codePoint -> transMap.get( codePoint ) )
.collect(
StringBuilder :: new,
StringBuilder :: appendCodePoint,
StringBuilder :: append
)
.toString() ;
}
uj5u.com熱心網友回復:
Mapget()介面的方法接受Object型別的引數作為引數。因此,您可以將幾乎任何型別的實體傳遞給它。不一定是與鍵的型別匹配的型別。在這種情況下 map 將回傳null。
這基本上就是你正在做的事情。chars()String 類的方法回傳IntStream一個流原始 int 值(注意 java 中沒有 CharStream 之類的東西)。嘗試從nullMap<Character, Character>結果中獲取值,因為映射將查找 type 的物件,顯然,不會有匹配項。Integer
相反,您必須顯式轉換int為char,它將自動裝箱為字符包裝型別。
此外,請考慮將map.get()替換為map.getOrDefault(),它會為地圖中未表示的任何符號回傳默認字符而不是 null。在下面的示例中,如果地圖不包含給定字符getOrDefault(),將回傳相同的字符。
public String transcribe(String dnaStrand) {
return dnaStrand.chars()
.map(c -> map.getOrDefault((char) c, (char) c))
.collect(StringBuilder::new,
StringBuilder::appendCodePoint,
StringBuilder::append)
.toString();
}
uj5u.com熱心網友回復:
如果你想獲取地圖值,你不能有一個類似的字串"AUGC",可能是"UAGC"?您可以閱讀更多關于Collection和. 如果您嘗試使用此代碼,一切都會正常作業。MapLinkedHashMap
public class Main {
public static void main(String[] args) {
Map<Character, Character> map = new LinkedHashMap();
map.put('G', 'C');
map.put( 'C', 'G');
map.put( 'T', 'A');
map.put( 'A', 'U');
Test test = new Test();
System.out.println(test.transcribe(map));
}
}
public class Test {
String transcribe(Map<Character, Character> map) {
StringBuilder stringBuilder = new StringBuilder();
for (Character ch : map.values()) {
stringBuilder.append(ch);
}
return String.valueOf(stringBuilder.reverse());
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/422561.html
標籤:
